python - 循环列表并输出两个唯一数字
问题描述
对 Python 非常陌生。我在一个列表中有 20 个数字,我每次都想要 2 个唯一值。所以理想情况下我最终有 10 行,每行有两个以前没有使用过的唯一数字。我有这样的东西,但它不止一次显示一个数字。
numberList=["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"]
myset = set(numberList)
rows = len(numberList)//2
i = 0
while i < rows:
random_nums = random.sample(myset,2)
print(random_nums)
i += 1
OUTPUT:
['13', '8']
['19', '8']
['11', '9']
['16', '7']
['1', '10']
['11', '20']
['16', '18']
['18', '2']
['20', '10']
['7', '4']
解决方案
假设:
numberList
以后不需要- 您需要的对数除以列表的长度,无需提醒
您可以使用这种非常简单有效的方法。从列表中抽取 2 个随机元素,只要列表不为空,就将其删除。
import random
numberList = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
"19", "20"]
while numberList:
a, b = random.sample(numberList, 2)
numberList.remove(a)
numberList.remove(b)
print(a, b)
示例输出:
9 14
13 12
7 5
10 2
15 20
19 4
11 1
18 3
17 6
8 16
如果您确实需要numberList
稍后在代码中使用,下一个有效的方法将是处理一组选取的元素。您将需要更复杂的逻辑:
import random
numberList = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
"19", "20"]
taken = set()
pairs = len(numberList) // 2
for _ in range(pairs):
a, b = None, None
while a is None or a in taken:
a = random.choice(numberList)
taken.add(a)
while b is None or b in taken:
b = random.choice(numberList)
taken.add(b)
print(a, b)
推荐阅读
- neo4j - 我正在使用 NEO4J apoc.refactor.setType 更改关系的 rel 类型,但没有运气
- sql - 在给定表上获取用户权限列表的查询不会输出所有用户
- javascript - 如何防止双击提交表单?Javascript
- azure-log-analytics - Kusto 查询:如何按列汇总,然后检查某些记录是否在组中
- javascript - Wordpress-没有插件工作,尽管控制台中没有错误
- mysql - 如何将数据从反应发布到 sql 数据库
- php - Yii2 katrik DateTimePicker 小部件
- mongodb - 如果行存在,则增加一个值
- wordpress - 我的 WordPress 网站已关闭,我该如何重新启动它?
- angular - 使用 Angular Universal 时在组件的 ngOnInit 中发出 http 请求有什么问题吗?