打印出字母序列给出的字母 - 蟒蛇

时间:2013-12-11 22:36:06

标签: python for-loop

在练习题考试中,我们获得以下内容:

ALPHABET = "ABCD" # letters to use in sequences 
seq = 3 * [ "" ]
letterSeqs = [ ] # list of all the letter sequences

for seq[0] in ALPHABET:
    for seq[1] in ALPHABET:
        for seq[2] in ALPHABET:
            letterSeqs.append("".join(seq))

我们应该估计列表letterSeqs中的条目总数以及第一个和最后一个条目。任何人都可以解释代码是如何工作的吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

这是奇怪的代码,但合法......

首先:

seq = 3 * [ "" ]

...创建一个空字符串,以及一个包含对该空字符串的三个引用的列表。

稍后,你这样做:

for seq[0] in ALPHABET:

这是棘手的一点。它循环遍历ALPHABET,将4个字母中的每一个依次分配给seq[0]。通常,您使用变量作为循环变量,而不是像这样的复杂目标。事实上,我猜老师这样做是为了让你失望。但是,它 结果是有用的,等等。

然后,对于这4次迭代中的每次迭代,你都会这样做:

    for seq[1] in ALPHABET:

每次外循环再次循环4次,因此总共有16个中间循环。然后,对于这16个中的每一个,你都这样做:

        for seq[2] in ALPHABET:

每次中间循环再次循环4次,共计64个内循环。

然后,对于每一个,你这样做:

            letterSeqs.append("".join(seq))

此时,seq将始终是3个单字符字符串的列表。这是使用seq[0]作为循环变量的回报。话虽这么说,有更好的方法来做同样的事情。只需使用for ifor jfor k,即可i+j+k。 (如果你想推广到3个字符串以外的东西,静态嵌套循环结构是困难的部分,而不是单独的变量......)

因此,它会join成一个3个字符的字符串。然后将其附加到空列表中。

所以,最后,你有一个包含64个3字符字符串的列表。

答案 1 :(得分:2)

for _ in container:

将运行len(container)次。当你嵌套三个深,它运行

len(container) ** 3 == 4 ** 3 == 64

次。每次附加一个str对象"".join(seq)时,最后的长度将为64.

当附加第一项时,seq中的所有位置都在ALPHABET中具有第一个值,因此该项目为"AAA"。最后,它们都具有ALPHABET的最后一个值,因此最后一项将是"DDD"