我得到一个列表列表,每个列表都有一个元组。如何获得一个包含多个元组的列表?
I'm getting a list of lists that each have one tuple. How do I get one list with several tuples?
我需要创建 1 个包含多个元组的列表。我能用的只有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' 作为元组的第一部分时,出现语法错误。
我做错了什么?有人可以帮忙吗?
谢谢
你的列表理解完全没问题。问题是每次遍历 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)
会得到你所需要的。
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')]
如您所见,enumerate
以 0
开头。但你可以改变它
list(enumerate(random.sample(first_names,5),1))
[(1, 'rose'), (2, 'billie'), (3, 'joe'), (4, 'nathatn'), (5, 'chris')
import random
random.shuffle(first_names) # shuffle list first_names
list(enumerate(first_names, 1)) # add index into the element
我需要创建 1 个包含多个元组的列表。我能用的只有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' 作为元组的第一部分时,出现语法错误。
我做错了什么?有人可以帮忙吗?
谢谢
你的列表理解完全没问题。问题是每次遍历 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)
会得到你所需要的。
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')]
如您所见,enumerate
以 0
开头。但你可以改变它
list(enumerate(random.sample(first_names,5),1))
[(1, 'rose'), (2, 'billie'), (3, 'joe'), (4, 'nathatn'), (5, 'chris')
import random
random.shuffle(first_names) # shuffle list first_names
list(enumerate(first_names, 1)) # add index into the element