遍历两个不均匀的列表,并在第二个列表结束后停止



我有两个列表,一个语言列表(长列表(和一个单词列表(有6项(。我需要在一种语言旁边打印每个单词,但一旦打印完所有6个项目,就停止打印。

起初,我运行了这段代码,它运行得很好(打印了6次(,但就我添加新的语言而言,它将是(文本(和添加的语言中的最后一项。

langs = ['russian', 'spanish', 'german', 'italian', 'english', 'english']
texts = ['technology', 'communism', 'community', 'university', 'computer', 'politics']        
for a, lang in enumerate(langs, start=1):
for b, text in enumerate(texts, start=1):
if b == a:  
break
print(text, '->', lang)

我认为这很容易,但我还没弄清楚。

您似乎只是在寻找zip:

for lang, text in zip(langs, texts):
print(text, '->', lang)

您所需要的功能正是zip在Python中所做的。

zip()-返回元组的迭代器,其中第i个元组包含每个参数序列或可迭代项中的第i个元素。当最短的可迭代输入用完时,迭代器停止。

langs = ['russian', 'spanish', 'german', 'italian', 'english']
texts = ['technology', 'communism', 'community', 'university', 'computer', 'politics'] 
print(list(zip(langs, texts)))
Output:
[('russian', 'technology'), ('spanish', 'communism'), ('german', 'community'), ('italian', 'university'), ('english', 'computer')]

这里最好使用的是zip()

for i,j in zip(langs,texts):
print(i," ---> ",j)

实现这一点的方法之一是使用其他答案中已经提到的zip。但是,如果不能使用zip功能,请切换循环。然而,if b == a: break在第一次迭代之后总是会中断。所以,试试:

for b, text in enumerate(texts, start=1):
for a, lang in enumerate(langs, start=1):
print(text, '->', lang)

for a, lang in enumerate(langs, start=1):
for b, text in enumerate(texts, start=1):
if a == len(b):
break
print(text, '->', lang)

zip功能非常适合此用途:

for lang, text in zip(langs, texts):
print(text, '->', lang)

相关内容

最新更新