首页 > 解决方案 > 循环列表并输出两个唯一数字

问题描述

对 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']

标签: pythonpython-3.x

解决方案


假设:

  • 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)

推荐阅读