天!
所以我有一个函数从两个列表中获取元素,第一个是标准列表格式,第二个是列表列表,内部列表包含 3 元组形式的元素。我的输出是第二个列表格式的新列表,在相同数量的内部列表中包含相同数量的元素,其中一些值由于通过函数而略有调整。
这是一个示例代码和一个示例函数,其中链是从 itertools 导入的。第一个是一些列表,例如,[0,1,2,3,1,5,6,7,1,2,3,5,1,1,2,3,5,6]
而第二个是一些列表,例如[[(13,12,32),(11,444,25)],[(312,443,12),(123,4,123)],[(545,541,1),(561,112,560)]]
def add(x, y):
return x + y
foo = [add(x, y) for x, y in zip(first, chain(*(chain(*second))))]
bar = [foo[i:i+3] for i in range(0, len(foo), 3)]
second = [bar[i:i+2] for i in range(0, len(foo) / 3, 2)]
* *注意: Chain(chain()) 部分用于以下目的:因为处理包含 3 元组的列表列表通常有点困难,所以 chain(chain()) 只是扁平化(变成传统列表单个元素)具有上述“奇怪格式”的第二个列表。其余的代码只是从函数的输出中将新列表重建为原始格式,该输出已经是扁平化的形式。
我遇到的问题是这样的:
我希望输出的大小和格式与原始“第二个”列表完全相同。如果两个列表都是空的,我希望返回空列表。如果第一个列表为空,我希望返回原始的第二个列表。如果第二个列表为空,我希望返回空列表。
如果第一个列表比第二个列表短,我希望函数运行,但是两个列表之间的元素可以匹配,那么第二个列表的“多余”保持不变。
如果第二个列表比第一个列表短,我希望该函数运行第二个列表中有多少元素,然后忽略列表 1 中的“多余”元素,因此仍然输出具有相同的新列表尺寸和格式作为原始的第二个列表。
我的问题是,我不知道如何在我的代码中实现这些细微差别。任何帮助,将不胜感激。
干杯,詹姆斯