在Python中将整数列表拆分为两个列表(一个偶数和一个奇数)

时间:2017-04-18 16:43:59

标签: python-2.7

我试过这个,但问题是我不知道如何让程序处理列表中的每个值

a=[1,4,7,3,2]
def group(L):
    li=[]
    for i in L:
        x= i/2
        if x==int(x):
            li.append(i)
            i.remove(float(i))
    print li
group(a)

6 个答案:

答案 0 :(得分:3)

您可以使用tuple一次返回两个列表,并使用模%运算符根据元素是偶数还是奇数来放置元素(x % 2是{{1}当0为偶数时,x为奇数时。

1

答案 1 :(得分:2)

我会使用mod(% 2)来确定偶数/奇数(其中even % 2 == 0odd % 2 == 1。请注意,无论是否检查偶数/奇数的符号,这都可以数学运算):

a=[1,4,7,3,2]
def group(L):
    evens = []
    odds = []
    for elem in L:
        if elem % 2 == 0:
            evens.append(elem)
        else:
            odds.append(elem)
    print evens, odds

# Call group with your input list
group(a)

答案 2 :(得分:1)

您可以通过仅使用两个列表来修改代码以使其工作(并使用modulo运算符%,这比检查x是否是int的实例更好:

a=[1,4,7,3,2]
def group(L):
    l_even=[]
    l_odd = []
    for i in L:
        if i % 2 == 0:
            l_even.append(i)
        else:
            l_odd.append(i)
    print l_even
    print l_odd
group(a)

答案 3 :(得分:1)

您可以使用partition recipe from itertools

from itertools import filterfalse, tee

def partition(pred, iterable):
    'Use a predicate to partition entries into false entries and true entries'
    # partition(is_odd, range(10)) --> 0 2 4 6 8   and  1 3 5 7 9
    t1, t2 = tee(iterable)
    return filterfalse(pred, t1), filter(pred, t2)

def is_odd(x):
    return x % 2

evens, odds = partition(is_odd, [1, 4, 7, 3, 2])
print(*evens)
print(*odds)

哪些印刷品:

4 2
1 7 3

答案 4 :(得分:1)

这里的许多答案都是通过使用模函数来实现的。因此,这是一种仅通过检查最右位零的状态来检测奇数或偶数整数的方法。解决方案根据此位using this solution

的状态将每个条目追加到列表的偶数或奇数
a = [1,4,7,3,2]
even,odd=[],[]
for i in a:
    (even,odd)[i >> 0 & 1].append(i)

用3行代码提供正确的解决方案:

>>> even
[4, 2]
>>> odd
[1, 7, 3]

答案 5 :(得分:0)

你可以利用偶数和2的模数为零的事实,并且奇数和2的模数不为零:

a = [1,4,7,3,2]

def group(numbers):
    evens = []
    odds = []
    for number in numbers:
        if number % 2 == 0:
            evens.append(number)
        else:
            odds.append(number)
    return evens, odds

evens, odds = group(a)