You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python随机打印列表中所有单词且每个仅输出一次

如何用Python随机打印列表中所有单词且每个仅出现一次

嘿,我来帮你搞定这个问题!先给你两个最简洁的实现方式,比你写的代码简单太多啦:

方法1:使用random.shuffle

这个方法会直接打乱原列表的顺序,之后遍历打印即可:

import random

words = ['left', 'none', 'super', 'bale']
random.shuffle(words)  # 原地打乱列表元素顺序
for word in words:
    print(word)

方法2:使用random.sample

如果你不想修改原列表,这个方法会返回一个打乱顺序的新列表,完全不影响原数据:

import random

words = ['left', 'none', 'super', 'bale']
shuffled_words = random.sample(words, k=len(words))  # 生成原列表的随机无重复抽样
for word in shuffled_words:
    print(word)

接下来看看你写的代码里的问题,这是导致它无法正常运行的原因:

  1. luke=luke.append(new) 写法错误:list.append()是原地修改列表的方法,它的返回值是None,你这样赋值会把luke直接变成None,后续操作必然报错。正确的写法是直接luke.append(new),不需要赋值。
  2. 列表删除逻辑混乱:你试图通过切片删除已选中元素,但循环里的判断逻辑有问题,更新nexa和words的时机不对,很容易出现元素漏删或重复处理的情况。
  3. 循环变量i冗余:其实不需要用i来控制循环次数,直接基于列表是否为空来判断循环更清晰。

如果你想坚持自己的思路(每次随机选一个元素,移除它直到列表为空),修正后的代码可以是这样:

import random

words = ['left', 'none', 'super', 'bale']
luke = []

while words:  # 当列表不为空时继续循环
    new = random.choice(words)
    luke.append(new)
    words.remove(new)  # 移除已选中的元素,避免重复选择

# 打印最终的随机列表
print(luke)
# 如果要逐个打印单词,就遍历luke:
# for word in luke:
#     print(word)

这个修正后的版本解决了原代码的所有问题,每次选中元素后直接从原列表移除,确保不会重复,直到列表为空,最后luke里就是所有随机顺序的单词啦。

内容的提问来源于stack exchange,提问作者Arnab Mukherjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:15