我有两个长度不同的< code>Vec,例如:
let xs = vec![1, 2, 3, 4, 5];
let ys = vec![11, 12, 13];
我想成对迭代它们,打印:
x=1, y=11
x=2, y=12
x=3, y=13
x=4; no matching Y
x=5; no matching Y
我可以使用< code>Iterator::zip来获得在< code>xs和< code>ys中具有匹配元素的对:
for (x, y) in xs.iter().zip(ys.iter()) {
println!("x={}, y={}", x, y);
}
但是对于“不匹配”位,我需要复杂的代码来检查长度并从其余部分中提取一部分。
我想要一个完全基于迭代器的解决方案,所以我尝试了:
let mut it_xs = xs.iter();
let mut it_ys = ys.iter();
while let (Some(x), Some(y)) = (it_xs.next(), it_ys.next()) {
println!("x={}, y={}", x, y);
}
while let Some(x) = it_xs.next() {
println!("x={}, no matching Y", x);
}
while let Some(y) = it_ys.next() {
println!("y={}, no matching X", y);
}
这是不正确的,因为第一个循环跳过了在另一个列表中没有匹配的第一个元素(x=4)。
是否有可能在迭代器的帮助下解决,而无需切分更大的Vec
的其余部分?
itertools
有一个方法zip_longest
可以做到这一点:
use itertools::Itertools;
use itertools::EitherOrBoth::{Both, Left, Right};
for it in xs.iter().zip_longest(ys.iter()) {
match it {
Both(x, y) => println!("x={}, y={}", x, y),
Left(x) => println!("x={}, no matching Y", x),
Right(y) => println!("y={}, no matching X", y),
}
}
无需外部板条箱的实现:
let mut it_xs = xs.iter();
let mut it_ys = ys.iter();
loop {
match (it_xs.next(), it_ys.next()) {
(Some(x), Some(y)) => println!("x={}, y={}", x, y),
(Some(x), None) => println!("x={}, no matching Y", x),
(None, Some(y)) => println!("y={}, no matching X", y),
(None, None) => break,
}
}
我有一个Firebase数据库,在一个特定的节点级别上有日期,每个日期都有键值对,其值为一定的数字。现在我需要找到最近两天常见的数字。
我的情况是这样的:我有两个带有不同类型对象的arraylists。每个对象都有一个字段名和一个字段日期ArrayList事件、ArrayList事物。我按名称对arraylists进行排序,如果名称相同,则按日期进行排序。 假设ArrayList1具有以下对象:event1 01.12、event1 05.12、event2 04.03、event3 05.05 我如何迭代两个arraylists
我从一个布局数组中拼接了一个位图,它将一个更大的位图作为指导。在一个位图中使用多个位图。我旋转整个位图时,我的解决方案是重新绘制它,但要让数组考虑这个旋转。位图的制作由数组的顺序决定。缝合假定数组从零开始,即第一个索引或最左上角,然后向右到最后,再到下一行的开始。我想有一个90、180、270和360功能可以调用。我想360很容易,我倒着迭代。我用的是11乘11,这是常数。 例如 当我旋转90度
我有两个不同长度的数据帧。我想用CAP*货币和Go*货币与df_cur的乘法来改变数据帧df中的列。这应该在国家和年份必须分别对两个数据家族相同的条件下完成。更具体地说, #df# #df_cur# 所以,我想像这样变换df: #df# 我回顾了许多将两个数据帧大小不同的列相乘得到的答案,但没有任何结果。 我的代码示例: 非常感谢您的宝贵时间!
问题内容: 如何堆叠x可以是任何数字的形状的按列向量? 例如, 工作正常,但沿着错误的尺寸连接。 问题答案: 简短答案:您不能。NumPy本机不支持锯齿数组。 长答案: 给出一个 可能或可能不 符合您预期的数组。例如,它不支持诸如或之类的基本方法,因此您应该像对待普通的Python列表那样对待它(对它进行迭代以执行操作而不是使用向量化的惯用法)。 存在几种可能的解决方法。最简单的是强迫和以共同的长