我无法弄清楚为什么此代码(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']
>>>
答案 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']