防止Python提供重复的输出

时间:2019-07-02 07:50:44

标签: python duplicates output

我的目标是使一系列项目提供尽可能多的输出,但没有重复的输出。我提供的代码只是我正在研究的一小部分。对于较大的数据集,我注意到脚本运行时重复输出困扰着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}')

感谢您的帮助!

4 个答案:

答案 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)

您可以通过以下方式生成随机输出,同时维护非冗余数据:

  1. 首先创建一个列表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')]
  1. 通过随机选择索引并进行打印,从permutations中挑选元素。
 num = int(random.random() * total_elements)
 print '{} {} {}'.format(permutations[num][0], permutations[num][1], permutations[num][2])
  1. 接下来,我们从列表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