首页 > 解决方案 > 嵌套 for 循环扩展现有列表

问题描述

向我解释这段代码。这是一个将整数输入打印为字母输出的程序。如果我输入 35,那么输出将是 35。我了解其中的大部分内容,但想知道位如何从中获取价值

twenty thirty forty fifty sixty seventy eighty ninety

代码是:

num = int(input("Enter the number:"))
numbers = ("zero one two three four five six seven eight nine".split())
numbers.extend("ten eleven twelve thirteen fourteen fifteen sixteen".split())
numbers.extend("seventeen eighteen nineteen".split())
numbers.extend(tens if ones == "zero" else (tens + " " + ones) 
    for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split()
    for ones in numbers[0:10])

print(numbers[num])

标签: pythonpython-3.x

解决方案


您在最后一行看到的两个主要概念是列表理解嵌套循环。看一看。

为了更好地理解发生了什么,我们将把这条线分成更简单的部分:

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    print(tens)

输出:234567890

上一个for循环对应于列表理解中的这个:

(tens for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split())

没有print,返回一个生成器。如果您想查看结果:

print(list(tens for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split()))

那些

numbers = ("zero one two three four five six seven eight nine".split())
for ones in numbers[0:10]:
    print(ones)

输出:零一二三四五六七八九

上一个for循环对应于列表理解中的这个:

    (ones for ones in numbers[0:10])

合并循环

我们可以合并它们:

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    for ones in numbers[0:10]:
        print(tens + " " + ones)
OUTPUT: twenty zero
twenty one
twenty two
twenty three
twenty four
twenty five
twenty six
twenty seven
twenty eight
twenty nine
thirty zero
thirty one
thirty two
[...]

由于我们不太喜欢twenty zero,我们将添加一个子句:

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    for ones in numbers[0:10]:
        if ones == "zero":
            print(tens)
        else:
            print(tens + " " + ones)
OUTPUT:
twenty
twenty one
twenty two
twenty three
twenty four
[...]

这与列表理解的行为相同:

(tens if ones == "zero" else (tens + " " + ones) for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split() for ones in numbers[0:10])

它返回一个列表(* generator),它将扩展到您的numbers列表。
最后,你输入的数字对应于列表中单词的索引


推荐阅读