为什么此代码中的第二个列表打印三次?

时间:2015-01-31 15:37:21

标签: python string list

我无法弄清楚为什么此代码(group2)中的第二个列表正在打印三次。它第一次在列表中打印一个字符串,第二次打印两个字符串,第三次打印三个字符串。让我困惑的是,这段代码中的第一个列表(group1)也打印了自己3次,但每次打印时都有三个字符串。有没有办法用所有三个字符串打印每个列表,只有一次?

def partition(x):
    group1 = []
    group2 = []
    for i in x:
        if i[0] >= "a" and i[0] <= "m":
            group1.append(i)
        else:
            group2.append(i)

            print(group1)
            print(group2)

list1 = ['andy', 'bob', 'marc', 'nick', 'paul', 'zac']

partition(list1)

SHELL OUTPUT:

 >>> 
['andy', 'bob', 'marc']
['nick']
['andy', 'bob', 'marc']
['nick', 'paul']
['andy', 'bob', 'marc']
['nick', 'paul', 'zac']
>>> 

2 个答案:

答案 0 :(得分:2)

每当您找到不属于group1的名称时,打印两个组

您的循环执行此操作:

  • 'andy'a开头,因此属于group1。追加它。
  • 'bob'b开头,因此属于group1。追加它。
  • 'marc'm开头,因此属于group1。追加它。
  • 'nick'n开头,因此属于group2。附加,并打印两个列表
  • 'paul'p开头,因此属于group2。附加,并打印两个列表
  • 'zac'z开头,因此属于group2。附加,并打印两个列表

如果您只想打印两个列表,最后 unindent 两个print()语句,这样它们就不再是循环的一部分了:

for i in x:
    if i[0] >= "a" and i[0] <= "m":
        group1.append(i)
    else:
        group2.append(i)

print(group1)
print(group2)

现在print()语句仅在for循环完成时执行。

Python代码使用缩进来分组语句;通过为print()行提供与属于其上方else:套件的行相同的缩进,它们也是该套件的一部分,并随之执行。

通过减少缩进以匹配for语句,它们将按顺序执行到该语句,因此在循环完成后。

答案 1 :(得分:2)

将for语句移到for循环之外将完成你的工作,因为你只需要打印一次最终列表。

def partition(x):
    group1 = []
    group2 = []
    for i in x:
        if i[0] >= "a" and i[0] <= "m":
            group1.append(i)
        else:
            group2.append(i)

    print(group1)
    print(group2)

list1 = ['andy', 'bob', 'marc', 'nick', 'paul', 'zac']

partition(list1)

输出:

['andy', 'bob', 'marc']
['nick', 'paul', 'zac']