python - 将两个列表组合成一个列表列表

标签 python list

我有两个列表:

a = ['1', '2']
b = ['11', '22', '33', '44']

然后我将它们组合起来创建一个如下所示的列表:

op = [('1', '11'), ('2', '22'), ('', '33'), ('', '44')]

我怎样才能做到这一点?

最佳答案

你想要itertools.zip_longest使用空字符串的 fillvalue:

a = ['1', '2']
b = ['11', '22', '33', '44']

from itertools import zip_longest # izip_longest for python2

print(list(zip_longest(a,b, fillvalue="")))
[('1', '11'), ('2', '22'), ('', '33'), ('', '44')]

对于 python2,它是 izip_longest:

from itertools import izip_longest 

print(list(izip_longest(a,b, fillvalue="")))
[('1', '11'), ('2', '22'), ('', '33'), ('', '44')]

如果您只想使用可以迭代 izip 对象的值:

for i,j  in izip_longest(a,b, fillvalue=""):
   # do whatever

一些时间与使用 map 的对比:

In [51]: a = a * 10000

In [52]: b = b * 9000

In [53]: timeit list(izip_longest(a,b,fillvalue=""))
100 loops, best of 3: 1.91 ms per loop

In [54]: timeit [('', i[1]) if i[0] == None else i  for i in map(None, a, b)]
100 loops, best of 3: 6.98 ms per loop

map 还使用 python2 创建另一个列表,因此对于大型列表或者如果您有内存限制,最好避免使用它。

关于python - 将两个列表组合成一个列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853511/

相关文章:

java - 在 Java 中使用列表列表

c# - 如何将 .csv 文件的每一行分隔成一个字符串列表>

javascript - 如何将数据从 JavaScript 发送到 Python

python - 计算允许 R 中的 QWERTY 错误的 Levenshtein 距离

C++ : List iterator not incrementable

c++ - 如何实现 'square list' 迭代器

python - 如何在 Python 中保持列表静态?

python - 如何在python中的输入字段后放置文本?

python - 图形显示窗口保持隐藏状态

python - 通过语法检查(Python)从一组可能性中选择最流畅的文本