Python 3中‘for item in list and item in list’写法可行吗?如何配对遍历双列表?
Python循环写法相关问题解答
嘿,我来帮你搞定这两个Python循环的问题:
问题1:Python 3中是否可以使用for item in list and item in list:这样的写法?
答案是不行,而且这种写法完全达不到你想要的效果。原因在于and是逻辑运算符,它会先计算list and item in list这个表达式的布尔值(要么是True要么是False),然后for循环会试图遍历这个布尔值——这显然会报错,因为布尔值不是可迭代对象。
如果你想遍历同时存在于两个列表中的元素,正确的写法有两种:
- 方法一:在循环里加条件判断
list_a = [1,2,3,4] list_b = [3,4,5,6] for item in list_a: if item in list_b: # 执行你的操作 print(item)
- 方法二:先求两个列表的交集再遍历(效率更高,尤其是列表很大的时候)
list_a = [1,2,3,4] list_b = [3,4,5,6] common_items = set(list_a) & set(list_b) for item in common_items: print(item)
问题2:如何同步遍历两个列表,配对accounts[n]和passwords[n]?
你想要的是把两个列表中对应位置的元素配对遍历,Python里专门有个函数干这个——zip()!它会把多个可迭代对象中对应位置的元素打包成元组,刚好满足你的需求。
结合你的现有代码,修改后的完整示例如下:
accounts = [] passwords = [] entry1= input('Accounts : ').split() entry2= input('Passwords : ').split() accounts.extend(entry1) passwords.extend(entry2) # 用zip同步遍历两个列表 for account, password in zip(accounts, passwords): # 这里写你要执行的配对操作,比如打印或者存储 print(f"账户:{account},密码:{password}")
这里要注意一个小细节:如果accounts和passwords的长度不一样,zip()会以较短的那个列表为准,遍历到较短列表的末尾就停止。如果你想处理完所有元素(长度不一致时用默认值填充缺失的部分),可以用itertools模块里的zip_longest,比如:
from itertools import zip_longest for account, password in zip_longest(accounts, passwords, fillvalue="空"): print(f"账户:{account},密码:{password}")
这样当其中一个列表更长时,缺失的位置会用fillvalue指定的值填充。
内容的提问来源于stack exchange,提问作者T.Galisnky
相关产品推荐
相关产品推荐

