我的目标是使一系列项目提供尽可能多的输出,但没有重复的输出。我提供的代码只是我正在研究的一小部分。对于较大的数据集,我注意到脚本运行时重复输出困扰着CSV文件,所以我想知道是否有办法在保持较高范围(100、250、400等)的同时保持重复输出的处理能力?
import random
Saying = ["I Like"]
Food = ['Coffee', 'Pineapples', 'Avocado', 'Bacon']
Holiday = ['on the 4th of July', 'on April Fools', 'during Autumn', 'on Christmas']
for x in range(10):
One = random.choice(Saying)
Two = random.choice(Food)
Three = random.choice(Holiday)
print(f'{One} {Two} {Three}')
感谢您的帮助!
答案 0 :(得分:0)
您可以对已经看到的元素使用set
,然后检查是否在set
中看到元素,其复杂度平均为O(1)。
另一种选择是随机播放列表并弹出一些元素:
import random
random.shuffle(lst)
while lst:
element = x.pop()
答案 1 :(得分:0)
您可以将np.random.choice
与参数replace=False
一起使用。此外,您可以使用size
参数采样任意数量的采样。
import numpy as np
Food = ['Coffee', 'Pineapples', 'Avocado', 'Bacon']
Holiday = ['on the 4th of July', 'on April Fools', 'during Autumn', 'on Christmas']
np.random.choice(Food, size=4, replace=False)
>>> array(['Avocado', 'Coffee', 'Pineapples', 'Bacon'], dtype='<U10')
np.random.choice(Holiday, size=4, replace=False)
>>> array(['on April Fools', 'on the 4th of July', 'during Autumn',
'on Christmas'], dtype='<U18')
答案 2 :(得分:0)
问题是您的机器人(我猜想?)无法记住到目前为止的输出,因此实际上没有办法检查您拥有的代码。
尝试以下方法:
import random
Saying = ["I Like"]
Food = ['Coffee', 'Pineapples', 'Avocado', 'Bacon']
Holiday = ['on the 4th of July', 'on April Fools', 'during Autumn', 'on Christmas']
memory=[]
done = False
while not done:
One = random.choice(Saying)
Two = random.choice(Food)
Three = random.choice(Holiday)
if f'{One} {Two} {Three}' not in memory:
memory.append(f'{One} {Two} {Three}')
if len(memory) == 10:
done = True
[print(item) for item in memory]
因此,现在创建10个短语不再花10张照片,而是创建10个不同的短语。
答案 3 :(得分:0)
您可以通过以下方式生成随机输出,同时维护非冗余数据:
permutations
,该列表基本上是要排列的列表的产物。permutations = list(itertools.product(*Statement))
## Example - [('I Like', 'Coffee', 'on the 4th of July'), ('I Like', 'Coffee', 'on April Fools'), ('I Like', 'Coffee', 'during Autumn'), ('I Like', 'Coffee', 'on Christmas')]
permutations
中挑选元素。 num = int(random.random() * total_elements)
print '{} {} {}'.format(permutations[num][0], permutations[num][1], permutations[num][2])
permutations
中删除该元素,以避免重复。del permutations[num]
完整代码:
import itertools, random
Saying = ["I Like"]
Food = ['Coffee', 'Pineapples', 'Avocado', 'Bacon']
Holiday = ['on the 4th of July', 'on April Fools', 'during Autumn', 'on Christmas']
Statements = [Saying, Food, Holiday]
permutations = list(itertools.product(*Statements))
random.seed()
total_elements = len(Saying) * len(Food) * len(Holiday)
while total_elements > 0:
num = int(random.random() * total_elements)
print '{} {} {}'.format(permutations[num][0], permutations[num][1], permutations[num][2])
del permutations[num]
total_elements = total_elements - 1