【问题标题】:Trying to make a sorted list only have unique numbers试图制作一个排序列表只有唯一的数字
【发布时间】:2017-10-08 04:01:39
【问题描述】:

这是我的代码:

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

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

【问题讨论】:

  • mn 是什么?你能提供更多关于你想要什么的信息吗?
  • 可以添加调用函数的那一行吗?
  • m 是随机数的最大值(从 1 开始)
  • n 是函数的随机数个数
  • so (50,3) 将返回一个列表 [(random#1-50),(random#1-50),(random#1-50)]

标签: python python-3.x list sorting


【解决方案1】:

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

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

  1. 循环遍历 newList 中的所有项目
  2. 询问项目是否不在 newList 中

第 2 部分永远不会正确,因为该项目从 newList 开始,所以 uniqList 返回为空。如果您将顺序稍微更改为:

【讨论】:

    【解决方案2】:

    我会这样做:

    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,因为我今天用完了
    【解决方案3】:

    如果数字不在 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
    

    【讨论】:

    • 感谢您的结构。对复习很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2021-11-16
    • 2012-07-11
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多