我得到了一个列表,每个列表都有一个元组。如何获得一个包含多个元组的列表?

2024-04-20 08:59:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个包含多个元组的列表。我只能用randint

我有这个:

import random

first_names = ['chris', 'joe', 'billie', 'rose', 'nathatn']
names = []

counter = 0
for name in first_names:
    counter += 1
    names = [(counter , first_names[random.randint(0, len(first_names)-1)])  ] 
    print(names)

我得到的结果如下:

[(1, 'chris')]
[(2, 'nathatn')]
[(3, 'billie')]
[(4, 'joe')]
[(5, 'chris')]

我想要完成的是这样一个列表:

[(1, 'chris'), (2, 'nathan'), (3, 'billie'), (4, 'joe'), (5, 'chris')]

我可以通过以下方式实现此格式:

names = [(first_names[random.randint(0, len(first_names)-1)],\
last_names[random.randint(0, len(last_names)-1)]) for name in range(0, len(first_names))]

但我不知道如何让计数器在列表中工作。当我添加'counter'作为元组的第一部分时,它只为每个元组提供5。我需要1,2,3,4,5。当我添加'counter+=1'作为元组的第一部分时,我得到了一个语法错误

我做错了什么?有人能帮忙吗

谢谢


3条回答
import random
random.shuffle(first_names) # shuffle list first_names
list(enumerate(first_names, 1)) # add index into the element
import random

first_names = ['chris', 'joe', 'billie', 'rose', 'nathatn']
names = []


for name in first_names:
    te=random.choice(first_names)
    names.append(te)
    print(names)
print(list(enumerate(names,1)))

您可以使用random.choice()

random.choice(seq):Return a random element from the non-empty sequence seq.

您可以使用enumerate自动生成counter变量

Output:
[(1, 'rose'), (2, 'joe'), (3, 'billie'), (4, 'nathatn'), (5, 'joe')]

如果您需要一个列表,而列表中的元素没有被重复,您可以使用 random.sample)

random.sample(population, k, *, counts=None)
Return a k length list of unique elements chosen from the population sequence or set. Used for random sampling without replacement.sample(['red', 'blue'], counts=[4, 2], k=5) is equivalent to sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5).

list(enumerate(random.sample(first_names,5)))
[(0, 'billie'), (1, 'nathatn'), (2, 'joe'), (3, 'rose'), (4, 'chris')]

如您所见enumerate0开头。但你可以改变这一点

list(enumerate(random.sample(first_names,5),1))
[(1, 'rose'), (2, 'billie'), (3, 'joe'), (4, 'nathatn'), (5, 'chris')

你的理解力完全好。问题是,每次迭代for循环时都要替换名称列表。您需要使用list.append()特性和元组理解。另外,要获得包含所有元素的单个列表,print语句应该在for循环之外。比如:

import random

first_names = ['chris', 'joe', 'billie', 'rose', 'nathatn']
names = []

counter = 0
for name in first_names:
    counter += 1
    t = (counter , first_names[random.randint(0, len(first_names)-1)]) 
    names.append(t)
print(names)

会给你你需要的

相关问题 更多 >