【问题标题】:How do i remove elements from a list without using remove(), or any other functions如何在不使用 remove() 或任何其他函数的情况下从列表中删除元素
【发布时间】:2021-04-04 13:04:20
【问题描述】:

假设,我有一个范围从 1 到 50 的列表。我需要从列表中删除所有带有因子 f(用户输入)的整数(元素)。例如,如果???? = 2,程序应从整数序列中删除 4, 6, 8, 10, ... 并打印序列中剩余的整数个数。此练习中不允许使用诸如 remove() 之类的 Functions() 或任何其他函数。我还在学习。

编辑:我不允许使用 enumerate()、切片、列表理解。对不起。如果有比我更好的输出方式,我愿意接受。

lis = [1, 2, 3, 4, 5........51]

while True:
    f = int(input())
    if f == 0:
        break

    for i in lis:
        if (i % f == 0 and i != f):
            lis.remove(i)........#i cant figure how to remove without using remove()
    c = len(lis)
    print('Number of remaining integers:', c)

【问题讨论】:

  • 如果允许您创建一个对我来说最干净的新列表,请添加有效元素并跳过其他元素(为此使用列表comprehension)。作为旁注,请注意使用 for i in lis 进行迭代并删除元素通常是一个坏主意,因为循环会失败。

标签: python python-3.x list


【解决方案1】:

如果不使用remove,有几种方法可以做到这一点。

第一个是创建一个新列表并将append 添加到您要保存的所有数字并忽略其他数字:

lis = [1, 2, 3, 4, 5........50]
new_lis = []

while True:
    f = int(input())
    for num in lis:
        if not (num  % f == 0 and num  != f):
           new_lis.append(num)
    lis = new_lis
    c = len(lis)
    print('Number of remaining integers:', c)

第二种解决方案是使列表中的数字无效,然后再次对其进行迭代,并使用list comprehension返回新的数字:

lis = [1, 2, 3, 4, 5........50]

while True:
    f = int(input())
    for idx, num in enumerate(lis):
        if (num % f == 0 and num != f):
            lis[idx] = None
    lis = [n for n in lis if n is not None]
    c = len(lis)
    print('Number of remaining integers:', c)

在这两种解决方案中,我建议将lis 更改为l,通常部分命名不会给出特殊值,因此不推荐。

【讨论】:

    【解决方案2】:

    我会这样做:

    lis = [1, 2, 3, 4, 5........50]
    
    while True:
       f = int(input())
       if f == 0:
          break
    
       new_lis = [item for item in lis if item == f or item % f != 0]
    
       print('Number of remaining integers:', len(new_lis))
    

    任何时候你有一个 for 循环将项目附加到列表中,并且列表开始为空 - 你很可能有一个列表理解。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      相关资源
      最近更新 更多