【问题标题】:Why does the For loop produce variable list length为什么For循环会产生可变列表长度
【发布时间】:2023-01-04 08:56:00
【问题描述】:

执行时我需要以下代码来生成一个固定长度为 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]

非常感谢!

【问题讨论】:

  • 为什么不用choices
  • 您的第一个示例有时会达到相同的数字,因此为什么 if 条件没有通过。
  • 而第二个例子会一直迭代,直到到达的 len 为 4。而 for 只执行了 4 次。
  • 您可以改用winning_ticket = random.sample(pool, 4)
  • 您的 for 循环做出 4 个选择。你的 while 循环继续选择直到你有 4清楚的结果。

标签: python list for-loop while-loop


【解决方案1】:

主要问题就像我在 cmets 中所说的那样,您的 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]

【讨论】:

  • 是的,这是有道理的!非常感谢!我对此还是个新手,下次我一定会使用@norie 的建议。
【解决方案2】:

答案很合乎逻辑 使用for pulled_ticket in range(4):时,您将触发choice,然后触发if4个次,如果你选择相同的数字两次,它不会被添加,你将完成3个列表中的项目

while loop等待因为有 4 个项目,所以如果它多次获得相同的选择,它将继续

【讨论】:

  • 知道了!太感谢了!现在很清楚了。
猜你喜欢
  • 1970-01-01
  • 2020-05-22
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
相关资源
最近更新 更多