在while循环中选择随机项不会按预期运行

时间:2015-04-14 08:33:28

标签: python

我想从列表中选择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

3 个答案:

答案 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个元素。