尝试制作排序列表只有唯一的数字

时间:2017-10-08 04:01:39

标签: python python-3.x list sorting

这是我的代码:

def lotteryNumbers(m,n):
    newList = []
    uniqueList = []
    n=n+1
    for i in range(1, n):
        if i <= n:
            randomness = int(random.randint(1,m))         
            newList.append(int(randomness))
    for number in newList:
        if number not in newList:
         uniqueList.append(number)
    sortNewList = uniqueList.sort()
    print(newList)
    print(uniqueList)
    return uniqueList

但在uniqueList中没有显示任何内容,并添加了第二个for循环。取出后,我得到了newList的列表,但数字并不明显。我试图在不使用集合的情况下执行此操作,而更多的if项目不在newList中,然后附加到uniqueList并返回具有唯一数字的已排序(升序)列表。

3 个答案:

答案 0 :(得分:1)

我会这样做:

def lotteryNumbers(m,n):
    list = []
    counter = 0
    while (counter < n):
        r = int(random.randint(1,m))
        if (r not in list):
            list.append(r)
            counter+=1
    list.sort()
    return list

或者是单行......

def lotteryNumbers(m,n):
    return random.sample(xrange(1, m), n)

https://docs.python.org/2/library/random.html

答案 1 :(得分:1)

只是为了解决OP的其他一些问题,因为pellucidcoder提供了有效的解决方案

uniqList中没有显示任何内容,因为第二个for循环:

  1. 循环浏览newList
  2. 中的所有项目
  3. 询问该项目是否不在newList
  4. 第2部分永远不会成立,因为该项来自newList,因此uniqList返回空。如果您将订单更改为:

答案 2 :(得分:0)

如果数字不在newList中,那么

你的语句是不确定的,因为数字在列表中。 所以这就是我所做的,只是对你的代码做了一点改动。有效的方法可以做到这一点,我认为已经发布了

def lotteryNumbers(m,n):
    newList = []
    uniqueList = []
    n=n+1
    seen = 0
    for i in range(1, n):
        if i <= n:
            randomness = int(random.randint(1,m))         
            newList.append(int(randomness))
    for number in newList:
        if number is not seen:
            uniqueList.append(number)
            seen = number
    sortNewList = uniqueList.sort()
    print(newList)
    print(uniqueList)
    return uniqueList