【问题标题】:split a list into two lists of odd-numbered entries and even -numbered entries [duplicate]将列表拆分为奇数条目和偶数条目的两个列表[重复]
【发布时间】:2014-05-10 15:19:59
【问题描述】:

我使用的是 python 101 4.1 版

输入示例为 (1,4,6,2,53,7)

需要的输出是偶数(2,4,6)奇数(1,7,53)

我需要在这个问题中使用一个只有 1 个输入的函数,这将是列表,我认为循环会有所帮助,但我仍然无法得到它。我尝试使用以下代码:

from math import *
from string import *
def odd_even(L):
    list1=raw_input()
    list1=list1.split(" ")
    even=[]
    odd=[]
    for x in list1:
        if x%2==0:
            even.append(L)
        else:
            odd.append(L)
    return even,odd

L=input()
print odd_even(L)

【问题讨论】:

  • 你为什么不编辑你之前的问题?
  • @EduardGamonal:不一定,这个有基于答案之一的代码.. 边缘情况,我会说。
  • 为什么在函数中使用更多的输入调用?你在这里也对Llist1 感到困惑。
  • 另外,不需要导入mathstring 模块。

标签: python python-2.7 for-loop infinite-loop


【解决方案1】:

输入数字并排序:

def odd_even(numbers):
    result = [], []
    for number in numbers:
        result[number%2].append(number)
    return result

def main():
    numbers = raw_input('Enter numbers:')
    numbers = map(int, numbers.split())
    even, odd = odd_even(numbers)
    print "even", even
    print "odd", odd

if __name__ == '__main__':
    main()

【讨论】:

    【解决方案2】:

    这是返回带有“偶数”和“奇数”键的字典的解决方案:

    def odd_even(L):
       even=[num for num in L if num % 2 == 0]
       odd=[num for num in L if num % 2 != 0]
       return {"even": even, "odd": odd}
    
    dict = odd_even([1,2,3,4,5])
    print dict["even"]
    print dict["odd"]
    

    【讨论】:

      【解决方案3】:
      1. 为什么要在你的函数中使用input()
      2. 当您使用input() 时,您会得到一个字符串,但您的函数需要整数,因此您必须将int() 应用于输入列表的每个元素。


      def odd_even(L):
          even=[]
          odd=[]
          for x in L:
              if x%2==0:
                  even.append(x)
              else:
                  odd.append(x)
          return even, odd
      
      
      L = input()
      L = L.split(" ")
      L = list(map(int, L))
      print(odd_even(L))
      

      【讨论】:

        【解决方案4】:

        很高兴您现在发布了一些代码;编辑第一个问题会更好。

        你快到了:

        # Module import is not necessary.
        
        def odd_even(L):
            #    list1=raw_input()       # <--- no need for raw input here
            #    list1=list1.split(" ")  # <--- nor here
            even=[]
            odd=[]
            for x in L:
                if x%2==0:
                    even.append(x)
                else:
                    odd.append(x)
            return even,odd
        
        L= range(20)                      # <--- can replace with raw_input if you need to
        print odd_even(L)
        

        【讨论】:

        • 我认为 Martijn Pieters 在我编辑帖子的同时编辑了我的帖子,然后我搞砸了他的编辑...我也找不到接受编辑的地方...抱歉,仍然学习。
        • 别担心 - @Martijn 有足够的代表。不需要编辑批准(他正在修复你的一些缩进)......帖子最终看起来很好:)
        【解决方案5】:

        使用条件表达式相同但不同:

        def is_even(n):
            return not n % 2
        
        def split_odd_even(L):
            '''Split a list of numbers into odds and evens.
        
            L --> list
            returns tuple of two lists
            '''
            odd, even = list(), list()
            for n in L:
                even.append(n) if is_even(n) else odd.append(n)
            return odd, even
        
        print split_odd_even(range(20))
        >>> ([1, 3, 5, 7, 9, 11, 13, 15, 17, 19], [0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
        

        【讨论】:

          猜你喜欢
          • 2011-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多