使用空列表

Working with empty lists

好的,所以我正在尝试创建一个空列表,然后将整数添加到列表中,然后挑选出最高、最低和中间的 5 个数字(使用切片按降序排列)并将它们显示出来...看起来很简单....

def main():
    nums = []
    for i in range(20,80,9):
        nums.append(i)
        print(*nums,sep=' ')
        print('The highest number is',max(nums))
        print('The lowest number is',min(nums))
        print('The middle 5 sorted high to low:')
        nums.sort()
        nums.reverse()
        print (*nums[1:6])
main()

好的,所以我根据您的建议对其进行了编辑,并且该程序运行良好......我只是无法绕过该死的 while 循环......任何人都可以看到我如何整合它吗?

  1. while nums.append(i):。 list.append returns None,并且 None 不计算为真。所以你的打印语句将永远不会被执行。
  2. nums.reverse[2:6] reverse 是一种方法,可以原地反转列表。它没有 return 任何东西。所以这部分会抛出一个TypeError。你想改为调用 nums.reverse()
  3. 反向方法不排序。你需要 nums.sort()
  4. nums[2:6] 将为您提供从索引 2 到 6(不包括)的元素。所以这只会给你 4 个元素。此外,您的列表有 9 个元素(如果排除最小值和最大值则为 7 个)。中间 5 个元素不会在索引 2 和 6 之间。

Python 有一个 help() 函数,如果你需要知道什么 functions/methods return.

就用它

这是一种方法:

nums = []
for i in range(20,80,7):
    nums.append(i)
    mx = max(nums)
    mn = min(nums)

nums.remove(mx)
nums.remove(mn)
mx2 = max(nums)
mn2 = min(nums)
nums.remove(mx2)
nums.remove(mn2)
nums.sort()
nums.reverse()
print nums

输出的是中间5个数字降序排列:

[62, 55, 48, 41, 34]

更好、更短的方法是:

def main():
    nums = []
    for i in range(20,80,7):
        nums.append(i)
        mx = max(nums)
        mn = min(nums)
    print "The highest number is %s " % mx
    print "The lowest number is %s " % mn
    while len(nums) != 5:
        nums.remove(max(nums))
        nums.remove(min(nums))
    nums.sort()
    nums.reverse()
    print "The middle 5 sorted high to low is %s:" % nums
main()

输出为:

The highest number is 76 The lowest number is 20 The middle 5 sorted high to low is [62, 55, 48, 41, 34]

您可以重构代码以像这样使用 while 循环。

def main():
    nums = []
    i = 20
    while i < 80:
        nums.append(i)
        print(*nums,sep=' ')
        i += 9

    print('The highest number is',max(nums))
    print('The lowest number is',min(nums))
    print('The middle 5 sorted high to low:')
    # removed on the basis that they are already sorted
    #nums.sort()
    nums.reverse()
    print (*nums[1:6])
main()

使用 range 会更好,因为您不需要在循环范围之外使用 i 变量。