list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10,11]
new_list = list()
i = 0
while i<5 and i<6:
new_list.append((list1[i],list2[i]))
i += 1
print(new_list)
Run Code Online (Sandbox Code Playgroud)
该代码有效,输出为:
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
Run Code Online (Sandbox Code Playgroud)
然而,我只是想知道当我们在 while 循环中给出两个更大/更小的选项时 Python 是如何工作的。在上面的例子中,我已经定义了i<5和i<6,但是它在内部是如何工作的,程序如何理解i<5属于list1和i<6属于list2?当我改变了while循环while i<6:,我得到IndexError: list index out of range。
请允许我做一个小更正你的说法:Python不明白,i<5应该只属于list1与i<6对list2。
事实上,正在发生的事情如下:
i在编写时定义了一个变量i=0while i<5 and i<6:你结合两个比较操作:
i小于5i小于6i作为两个指数list1和list2那你增加i的1。当只写while i<6:发生的事情是 fori=5循环仍然运行并且您的代码尝试获取list1[5]哪个不存在,list1大小为 5,因此最后一个元素使用list1[4]. 如果您只是list1[5]在控制台中输入,您将得到一个IndexError,与i<5从您的while-condition 中删除 时得到的错误完全相同。
如果你想几个列表合并成一个列表,Python有一个内置的此功能:zip()
如果像你的情况,该名单是各种大小的,你不想失去任何元素的话,也是在这种情况下, ,python 为您介绍zip_longest()了itertools模块中的方法。
这是它的外观:
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10,11]
new_list = [*zip(list1,list2)] # or list(zip(list1,list2))
print(new_list)
>>> [(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
# without loosing elements:
from itertools import zip_longest
new_list = [*zip_longest(list1,list2)]
print(new_list)
>>> [(1, 6), (2, 7), (3, 8), (4, 9), (5, 10), (None, 11)]
Run Code Online (Sandbox Code Playgroud)
如您所见,list2使用zip. 有了zip_longest,但是,它仍然存在与“失踪”元素从list1完成用None。
希望这有助于澄清一些事情。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |