提问人:Mainland 提问时间:10/14/2023 最后编辑:Mark AdlerMainland 更新时间:10/16/2023 访问量:142
交替合并两个列表
Combine two lists alternatively
问:
我正在做一个简单的列表理解:以替代顺序组合两个列表并制作另一个列表。
big_list = [i,j for i,j in zip(['2022-01-01','2022-02-01'],['2022-01-31','2022-02-28'])]
预期输出:
['2022-01-01','2022-01-31','2022-02-01','2022-02-28']
当前输出:
Cell In[35], line 1
[i,j for i,j in zip(['2022-01-01','2022-02-01'],['2022-01-31','2022-02-28'])]
^
SyntaxError: did you forget parentheses around the comprehension target?
答:
6赞
Samwise
10/14/2023
#1
执行嵌套推导式操作,将项目从压缩的元组中拉出:
big_list = [
i
for t in zip(
['2022-01-01','2022-02-01'],
['2022-01-31','2022-02-28']
)
for i in t
]
3赞
Goku - stands with Palestine
10/14/2023
#2
您可以从 zip 中取消嵌套:
big_list = [
item
for s in
zip(['2022-01-01','2022-02-01'],['2022-01-31','2022-02-28'])
for item in s]
#output
['2022-01-01', '2022-01-31', '2022-02-01', '2022-02-28']
一种方法是使用 itertools:
import itertools
big_list = list(itertools.chain(*zip(['2022-01-01','2022-02-01'],['2022-01-31','2022-02-28'])))
#output
['2022-01-01', '2022-01-31', '2022-02-01', '2022-02-28']
编辑:
这将非常缓慢:
sum([list(x) for x in zip(['2022-01-01','2022-02-01'],['2022-01-31','2022-02-28'])],[])
#output
['2022-01-01', '2022-01-31', '2022-02-01', '2022-02-28']
2赞
cards
10/14/2023
#3
A -free comprehension:交替追加。zip
l1 = ['2022-01-01','2022-02-01']
l2 = ['2022-01-31','2022-02-28']
l = [l1[i//2] if not i % 2 else l2[(i)//2] for i in range(min(len(l1), len(l2))*2)]
用于确保大小相等的列表(就像这样做一样)。min
zip
一种自由的功能方法。如果列表大小不同,则应用类似“政治”的列表。zip
zip
from itertools import chain
# l1, l2 from above
l = list(chain.from_iterable(map(lambda x, y: (x, y), l1, l2)))
2赞
Swifty
10/14/2023
#4
只是为了它,因为我实际上也会使用:zip
list1 = ['2022-01-01','2022-02-01']
list2 = ['2022-01-31','2022-02-28']
big_list = [(list1, list2)[i%2][i//2] for i in range(2 * min(len(list1), len(list2)))]
另一个版本,用于在两个列表的 2 个迭代器之间切换:itertools.cycle
from itertools import cycle
big_list = [next(next(cy)) for cy in [cycle((iter(list1), iter(list2)))] for _ in range(2 * min(len(list1), len(list2)))]
1赞
XMehdi01
10/16/2023
#5
我的代码使用函数将 L1 和 L2 中的相应元素配对,并使用循环将每个元素与其对组合在一起zip
for
l1 = ["2022-01-01", "2022-02-01"]
l2 = ["2022-01-31", "2022-02-28"]
zipped_lists = zip(l1, l2)
l3 = []
for list in zipped_lists:
for date in list:
l3.append(date)
print(l3)
# l3 = ['2022-01-01', '2022-01-31', '2022-02-01', '2022-02-28']
评论
big_list = [(i,j) for i,j in zip(['2022-01-01','2022-02-01'],['2022-01-31','2022-02-28'])