嵌套for循环扩展现有列表

时间:2018-06-26 08:39:39

标签: python python-3.x

请向我解释此代码。这是一个将整数输入打印为字母输出的程序。如果我输入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])

1 个答案:

答案 0 :(得分:3)

在最后一行看到的两个主要概念是list comprehensionnested loops。看看。

为了更好地了解发生了什么,我们将在较简单的部分中拆分该行:

TENS

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

输出:二十三四十五六十七八百八十九十

上一个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列表。
最后,您输入的数字对应于列表中单词的索引