如何在python中选择没有替换的数字

时间:2016-08-29 20:48:22

标签: python python-2.7

所以我试图在数字之间进行混合匹配,这是我的代码

- (void)authorizeRequest:(NSMutableURLRequest *)request
       completionHandler:(void (^)(NSError *error))handler

问题是它是随机的,但它不断重复像这里的数字

**

  

1.0工作是[4.0]。   2.0工作是[5.0]。   3.0工作是[4.0]。

**

我该怎么做才能让它不重复。 我正在使用python 2.7.12

另外,我如何才能使用字母数字而不是浮点数。

4 个答案:

答案 0 :(得分:1)

实现此目标的最佳方法是使用random.shuffle(如果您想随机化原始样本列表)或random.select(如果您想保留原始样本副本):

random.shuffle的示例:

>>> import random
>>> my_samples = ['A1', 'A2', 'A3']
>>> shuffle(my_samples)
>>> cool1, cool2, cool3 = my_samples
# Random Result: cool1 = 'A3', cool2='A1', cool3='A2'

random.select的示例:

>>> cool1, cool2, cool3 = random.sample(['A1', 'A2', 'A3'], 3)

如果您希望解决方案发生微小变化。您可以根据随机选择从样本中删除条目,并从剩余样本中获取下一个选项,如:

>>> import random
>>> cool1 = random.sample(my_samples,1)
>>> my_samples.remove(*cool1)
>>> my_samples
['A1', 'A3']
>>> cool2 = random.sample(my_samples,1)
>>> my_samples.remove(*cool2)
>>> cool3 = random.sample(my_samples,1)
>>> my_samples.remove(*cool3)
>>> my_samples 
[]
>>> cool1, cool2, cool3
(['A2'], ['A3'], ['A1'])

答案 1 :(得分:1)

写一个类从列表中选择一个唯一元素 1.排列找到所有独特的元素
2.休息可以定义新数据和结果长度

from itertools import permutations
class PickOne( object ):
    def __init__(self,lst,l):
        self.lst    = lst
        self.visit  = set()
        self.l      =  l 
        self.lenght = self.number(l)
    def pick(self):
        if len(self.visit) == self.lenght :
            print 'run out numbers'
            return 
        res = tuple(random.sample(self.lst,self.l))
        while res in self.visit:
            res = tuple(random.sample(self.lst,self.l))
        self.visit.add( res )
        return res
    def reset(self,l,lst = None):
        if not lst:
            lst = self.lst
        self.__init__(lst,l)

    def number(self,l):
        return len( list(permutations(self.lst,l)) )

示例:

 a = PickOne([1,2,3,4],1)
    >>> a.pick()
    (2,)
    >>> a.pick()
    (1,)
    >>> a.pick()
    (4,)
    >>> a.pick()
    (3,)
    >>> a.pick()
    run out numbers

    >>> a.reset(2)
    >>> a.pick()
    (3, 1)
    >>> a.pick()
    (3, 4)
    >>> a.pick()
    (2, 1)

答案 2 :(得分:0)

由于您是从列表中进行选择,因此您应该在每次检查后从列表中删除该条目。

  1. 创建原始列表,将根据需要使用。

  2. 从第一个列表中创建第二个列表,以便在您选择时使用。

  3. 当您从列表中选择每个元素时,将其删除

  4. 将所选元素放入所选元素列表中。

  5. Python remove method

      

    <强>参数
      obj - 这是要从列表中删除的对象。

         

    返回值
      此方法不返回任何值,但删除了   从列表中给出对象。

         

    示例
       以下示例显示了remove()方法的用法。

    #!/usr/bin/python
    
    aList = [123, 'xyz', 'zara', 'abc', 'xyz'];
    
    aList.remove('xyz');
    print "List : ", aList
    aList.remove('abc');
    print "List : ", aList
    
         

    当我们运行以上程序时,它会产生以下结果 -

    List :  [123, 'zara', 'abc', 'xyz']
    List :  [123, 'zara', 'xyz']
    

答案 3 :(得分:-2)

你可以这样做:

cool1, cool2, cool3 = random.sample([A1, A2, A3], 3)
  

另外,我如何才能使用字母数字而不是浮点数。

您是否尝试过不将输入转换为浮动...?