我想从列表中选择n个项目(P1,P2,P3)。 如果它们不在结果列表(LIST)中,则应附加/扩展它们。如果while循环达到n(这里< = 3),它应该停止。 但我得到4,6项的结果。为什么? 谢谢。
from random import choice
P1 = ["a", "b","c", "d", "e","f","g","h","i","j"]
P2 = ["a","m","b","n","e","z","h","g","f","j"]
P3 = [("a","b"), ("c","e"), ("g","a"), ("m","j"), ("d","f")]
LIST = []
while len(LIST) <=3:
c1, c2 = choice(P3)
d = choice(P1)
e = choice(P2)
f = choice(P1)
g = choice(P2)
if c1 not in LIST and c2 not in LIST:
LIST.extend([c1,c2])
if d not in LIST:
LIST.append(d)
if e not in LIST:
LIST.append(e)
if f not in LIST:
LIST.append(f)
if g not in LIST:
LIST.append(g)
print LIST
答案 0 :(得分:0)
那是因为你在每个循环开始时检查那个条件。
在循环开始时,条件将为0,1,2,但在循环中,您最多可以插入5个新元素,最多可增加7个。
答案 1 :(得分:0)
while
执行整个循环,在开始下一次迭代之前,它会检查条件是否仍为真。
在循环的单个迭代中,您最多可以将列表扩展到6个元素。
如果你真的只想要3个元素,那么每次添加内容时都需要检查条件,如下所示:
while True:
c1,c2 = choice(P3)
d = choice(P1)
e = choice(P2)
f = choice(P1)
g = choice(P2)
if c1 not in LIST and c2 not in LIST:
LIST.append(c1)
if len(LIST) >= 3:
break
LIST.append(c2)
if len(LIST) >= 3:
break
if d not in LIST:
LIST.append(d)
if len(LIST) >= 3:
break
if e not in LIST:
LIST.append(e)
if len(LIST) >= 3:
break
if f not in LIST:
LIST.append(f)
if len(LIST) >= 3:
break
if g not in LIST:
LIST.append(g)
if len(LIST) >= 3:
break
答案 2 :(得分:0)
检查列表中是否有少于/等于3个元素
while len(LIST) <=3:
之后,在再次检查之前,最多可添加5个项目。
所以,如果您的上一个循环在开始时有3个项目,并且最多可添加5个项目,那么您的列表最多可包含8个元素。