【问题标题】:How do I add Python list in order?如何按顺序添加 Python 列表?
【发布时间】:2022-11-04 23:17:06
【问题描述】:

我想制作一个接收随机列表并仅存储正数的代码。 但是,如果我使用我编写的代码运行它,我只会得到正数,但顺序是相反的。我应该怎么办?

作为代码示例,显示 [3, 2, 1, 0]。 我想把它打印出来 [0, 1, 2, 3]。

def filter(list):
    flist = []
    for i in list:
        if list[i]>=0:
            flist.append(list[i])
        else:
            continue
    return flist
    
list = [-1,-2,-3,-4,0,1,2,3]
print(filter(list))

【问题讨论】:

  • i 不是列表索引,它是列表元素。 list[i] 不是迭代的当前元素。
  • 您是否考虑过列表理解:[x for x in list if x >= 0]
  • 当您执行for i in list 时,i 是列表的一个元素,而不是索引,因此您不应该执行flist.append(list[i]),而是使用`flist.append(i)`
  • 因此,在第一次迭代中,您将附加list[-1],它是列表的最后一个元素。
  • 此外,list 是内置模块中的一个类 - 它是一个变量的糟糕名称。

标签: python list


【解决方案1】:

在返回列表之前排序

def filter(list):
        flist = []
        for i in list:
            if list[i]>=0:
                flist.append(list[i])
            else:
                continue
        flist.sort()
        return flist
    
list = [-1,-2,-3,-4,0,1,2,3]
print(filter(list))

输出:

[0, 1, 2, 3]

【讨论】:

  • i 不是索引,而是列表的一个元素,所以你不能做 list[i]
  • 我认为他希望它们与原始列表的顺序相同,而不是按数字排序。
  • 我不想被排序,我希望它按照原始列表中的顺序打印。我想我说了一些可能被误解的东西。
【解决方案2】:

尝试:

print(filter(list[::-1]))

【讨论】:

  • TypeError:过滤预期的 2 个参数,得到 1
【解决方案3】:

for i in list 迭代列表中的项目,而不是索引。由于列表中的某些项目是负数,因此当您将它们用作索引时,您最终会以相反的顺序遍历列表的中途。 (如果列表中的项目碰巧不是同一列表的有效索引,则您将获得 IndexError 代替。)

要按索引顺序遍历列表中的所有项目,请使用range

# 'filter' and 'list' are both builtin names, don't redefine them

def filter_nat(nums):
    flist = []
    for i in range(len(nums)):
        if nums[i]>=0:
            flist.append(nums[i])
        else:
            continue
    return flist
    
nums = [-1,-2,-3,-4,0,1,2,3]
print(filter_nat(nums))  # [0, 1, 2, 3]

不过,按值迭代更简单;您只需要使用值本身而不是尝试将其用作索引:

def filter_nat(nums):
    flist = []
    for i in nums:
        if i >=0:
            flist.append(i)
    return flist
    
nums = [-1,-2,-3,-4,0,1,2,3]
print(filter_nat(nums))  # [0, 1, 2, 3]

并且使用理解而不是单独appending 每个项目更简单:

def filter_nat(nums):
    return [i for i in nums if i >= 0]
    
nums = [-1,-2,-3,-4,0,1,2,3]
print(filter_nat(nums))  # [0, 1, 2, 3]

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多