为什么For循环会产生可变列表长度
Why does the For loop produce variable list length
我在执行时需要以下代码来生成一个固定长度为 4 个元素的列表。
为什么它不能与 for 循环一起使用?
from random import choice
pool = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e']
winning_ticket = []
for pulled_ticket in range(4):
pulled_ticket = choice(pool)
if pulled_ticket not in winning_ticket:
winning_ticket.append(pulled_ticket)
print(winning_ticket)
当我执行代码时,结果如下所示:
[7, 4, 8, 'e']
[5, 'e']
['e', 6, 3]
但是有了 while 循环,我就没有这个问题了:
from random import choice
pool = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e']
winning_ticket = []
while len(winning_ticket) < 4:
pulled_ticket = choice(pool)
if pulled_ticket not in winning_ticket:
winning_ticket.append(pulled_ticket)
print(winning_ticket)
列表长度始终为四:
['e', 5, 1, 8]
[7, 'd', 2, 8]
[2, 6, 'e', 10]
非常感谢!
答案很合乎逻辑
使用 for pulled_ticket in range(4):
时,您将触发 choice
然后 if
4 次,如果您选择相同的数字两次,则不会添加您将完成列表中的 3 个项目
while loop
等待 有 4 个项目,因此如果它多次获得相同的选择,它将继续
主要问题就像我在评论中所说的那样,您的 for 循环总是只进行 4 次迭代。当你的 while 循环一直持续到到达的长度为 4 时。
示例输出:
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
[4, 8, 'a']
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
Iteration: 5
Iteration: 6
[9, 6, 'a', 'b']
您可以看到 for 循环在进行 4 次传递时为您提供了一个 3 大小的列表,这意味着一旦它命中相同的随机数。
一种更简单的方法是简单地使用选择,就像@norie,因为你可以指定返回列表的大小并且不需要循环。
print(choices(pool, k=4))
['a', 8, 'd', 8]
我在执行时需要以下代码来生成一个固定长度为 4 个元素的列表。 为什么它不能与 for 循环一起使用?
from random import choice
pool = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e']
winning_ticket = []
for pulled_ticket in range(4):
pulled_ticket = choice(pool)
if pulled_ticket not in winning_ticket:
winning_ticket.append(pulled_ticket)
print(winning_ticket)
当我执行代码时,结果如下所示:
[7, 4, 8, 'e']
[5, 'e']
['e', 6, 3]
但是有了 while 循环,我就没有这个问题了:
from random import choice
pool = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e']
winning_ticket = []
while len(winning_ticket) < 4:
pulled_ticket = choice(pool)
if pulled_ticket not in winning_ticket:
winning_ticket.append(pulled_ticket)
print(winning_ticket)
列表长度始终为四:
['e', 5, 1, 8]
[7, 'd', 2, 8]
[2, 6, 'e', 10]
非常感谢!
答案很合乎逻辑
使用 for pulled_ticket in range(4):
时,您将触发 choice
然后 if
4 次,如果您选择相同的数字两次,则不会添加您将完成列表中的 3 个项目
while loop
等待 有 4 个项目,因此如果它多次获得相同的选择,它将继续
主要问题就像我在评论中所说的那样,您的 for 循环总是只进行 4 次迭代。当你的 while 循环一直持续到到达的长度为 4 时。
示例输出:
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
[4, 8, 'a']
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
Iteration: 5
Iteration: 6
[9, 6, 'a', 'b']
您可以看到 for 循环在进行 4 次传递时为您提供了一个 3 大小的列表,这意味着一旦它命中相同的随机数。 一种更简单的方法是简单地使用选择,就像@norie,因为你可以指定返回列表的大小并且不需要循环。
print(choices(pool, k=4))
['a', 8, 'd', 8]