【问题标题】:Python For Loop in a list [duplicate]列表中的Python For循环[重复]
【发布时间】:2015-11-25 18:42:15
【问题描述】:

我当前的代码使用 for 循环,我试图从列表 3 中删除偶数,从列表 2 中删除奇数。 但是我的问题是,当 for 循环迭代时,位置 2 中的项目在删除项目后向下移动到位置 1,因此它会跳过一个项目并且代码无法按预期工作

list1 = ["roll", "burger", "cheese", "ketchup", "mustard"]
list2 = []
list3 = []

for i in list1:
    print(i)
#code to add ten numbers to list2
a = 0
while a < 10:
 a = a + 1
 userdata = input("Enter a whole number: ")
 usernum = int(userdata)
 list2.append(usernum)

list3[:0]=list2
print(list3)

for n in list2:
     if int(n) % 2 != 0:
         list2.remove(n)
print(list2)

for x in list3:
    if int(x) % 2 == 0:
        list3.remove(x)
print(list3)

如何使这段代码使用 for 循环删除偶数和奇数而不跳过任何数字?

【问题讨论】:

  • 您真的想就地制作它吗?代替列表推导怎么样?
  • 例如,您可以创建一个新列表并将所需的值推入其中,而不是从您正在迭代的列表中删除它们
  • 或者,您可以在输入阶段附加到所需的列表。
  • 您可以在list() 中附上您的列表,以便在迭代时进行复制,但删除将在原始列表中进行。
  • 您为回答者赢得了大量代表,恭喜!

标签: python


【解决方案1】:

首先,您不应该修改您正在迭代的列表。

至于你从列表中删除奇数和偶数的问题,在 Python 中有一个非常简单的方法:filter()

过滤器生成器结合一个简单的 lambda 函数就可以解决问题:

list3 = filter(lambda x: x % 2, list3)

【讨论】:

    【解决方案2】:

    首先,修改您正在迭代的列表是一种未定义的行为,因此是一种不好的做法。 对于您的问题,我建议您使用filter:

    even = filter(lambda x: x%2, list3)
    odd = filter(lambda x: not x%2, list2)
    

    【讨论】:

      【解决方案3】:

      作为列表过滤的替代方法,您可以在用户输入值时对其进行排序。通过适当的关注点分离,可能看起来像这样:

      def get_numbers(num=10):
          for _ in xrange(10):
              yield int(input("Enter a whole number: "))
      
      def populate_lists(size, evens, odds):
          for number in get_numbers(size):
              (odds if (size % 2) else evens).append(number)
      

      【讨论】:

        【解决方案4】:

        基本上在迭代时修改列表是一种不好的做法。由于在您迭代列表时正在修改列表。您可以使用列表推导:

        list2 = [n for n in list2 if int(n) % 2 == 0]
        print list2
        
        list3 = [n for n in list3 if int(n) % 2 != 0]
        print list3
        

        【讨论】:

          【解决方案5】:

          您可以在迭代时复制列表,但在实际列表中进行删除:

          list1 = ["roll", "burger", "cheese", "ketchup", "mustard"]
          list2 = []
          list3 = []
          
          for i in list1:
              print(i)
          #code to add ten numbers to list2
          a = 0
          while a < 10:
           a = a + 1
           userdata = input("Enter a whole number: ")
           usernum = int(userdata)
           list2.append(usernum)
          
          list3[:0]=list2
          print(list3)
          
          for n in list(list2):
               if int(n) % 2 != 0:
                   list2.remove(n)
          print(list2)
          
          for x in list(list3):
              if int(x) % 2 == 0:
                  list3.remove(x)
          print(list3)
          

          【讨论】:

            猜你喜欢
            • 2020-10-18
            • 2018-11-11
            • 2018-12-01
            • 2016-10-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-17
            • 2014-02-22
            相关资源
            最近更新 更多