[英]Dictionary/list/tuple comprehension from 3 lists
假设我有以下 3 个列表:
x = ['a', 'a', 'b', 'b']
y = ['y1', 'y2', 'y3', 'y4']
z = ['p', 'p', 'p', 'p']
我正在尝试将 output 发送至:
[('a',['y1', 'y2'], ['p', 'p']),('b',['y3', 'y4'], ['p', 'p'])]
x 以固定的已知长度重复(此处已知长度为 2,即序列中的下一个为 c,c)。 x % known length 不一定是 0。z 不会总是有相同的项目。
我已经尝试使用defaultdict
和许多版本的理解,但似乎无法破解它。 我将要处理的列表实际上要大得多,因此 for 循环需要很长时间。 所以我需要一些高性能的东西。
您可以将groupby
与zip
一起使用:
from itertools import groupby
x = ['a', 'a', 'b', 'b']
y = ['y1', 'y2', 'y3', 'y4']
z = ['p', 'p', 'p', 'p']
result = [(k, *list(zip(*grp))[1:]) for k, grp in groupby(zip(x, y, z), lambda s: s[0])]
# which gives
[('a', ('y1', 'y2'), ('p', 'p')), ('b', ('y3', 'y4'), ('p', 'p'))]
这个列表理解似乎可以解决问题:
data = [(x[i], [y[i], y[i + 1]], [z[i], z[i + 1]]) for i in range(0, len(x), 2)]
print(data)
Output
[('a', ['y1', 'y2'], ['p', 'p']), ('b', ['y3', 'y4'], ['p', 'p'])]
注意:我假设x
总是成对具有相同的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.