包含字典,列表和元组的列表中的迭代

时间:2016-12-02 11:22:15

标签: python list dictionary

我正在尝试解决问题

l=[2,-8,9,0,-77,0,9.4,"hello","san",90,"a",(4,8,9),[8,9,9,"shree",{'a':1,'b':2,'c':[2,9,9,9.00]}]]

我需要创建两个列表并添加第一个列表,如果number是奇数,则在第二个列表中添加,如果数字是偶数,则可以是元组中的数字或列表中的列表。 如果string然后忽略它。如果有字典,则检查值是奇数还是偶数,并将相应的列表添加为奇数和偶数。

我的代码就是这样,但我越来越难以继续进行。

l=[2,-8,9,0,-77,0,9.4,"hello","san",90,"a",(4,8,9),[8,9,9,"shree",{'a':1,'b':2,'c':[2,9,9,9.00]}]]
even=[]
odd=[]

def fun(l):
    for i in l:
    if not isinstance(i,basestring):
        if i%2==0:
            even.append(i)
         else:     
            odd.append(i)

print even
print odd
print fun(l)

4 个答案:

答案 0 :(得分:4)

如果当前元素为funlisttuple,则必须递归调用dict函数,从而迭代并添加 项目

even=[]
odd=[]
def fun(lst):
    for x in lst:
        if isinstance(x, (list, tuple)):
            fun(x) # recursively call for x
        if isinstance(x, dict):
            fun(x.values()) # call for values
        if isinstance(x, (int, float)):
            if x % 2 == 0:
                even.append(x)
            else:
                odd.append(x)

lst = [2,-8,9,0,-77,0,9.4,"hello","san",90,"a",(4,8,9),[8,9,9,"shree",{'a':1,'b':2,'c':[2,9,9,9.00]}]]
fun(lst)
print(even, odd)
# [2, -8, 0, 0, 90, 4, 8, 8, 2, 2] [9, -77, 9.4, 9, 9, 9, 9, 9, 9.0, 1]

答案 1 :(得分:1)

您需要一系列if-else或切换来管理所有不同类型的可能性。 如果它是列表 dict 那么......

答案 2 :(得分:1)

考虑一下:

def descend(o):
    if isinstance(o, (list, tuple)):
        for v in o:
            for r in descend(v):
                yield r
    elif isinstance(o, dict):
        for r in descend(o.values()):
            yield r
    elif isinstance(o, (int, float)):
        yield o

打印:

>>> list(descend(l))
[2, -8, 9, 0, -77, 0, 9.4, 90, 4, 8, 9, 8, 9, 9, 1, 2, 9, 9, 9.0, 2]

这可以变成一个发电机:

even = []
odd = []

for x in descend(l):
    (even if x % 2 == 0 else odd).append(x)

结果是:

>>> even
[2, -8, 0, 0, 90, 4, 8, 8, 2, 2]
>>> odd
[9, -77, 9.4, 9, 9, 9, 1, 9, 9, 9.0]

然后我们可以拆分列表:

http://content.domainname.me/wp-content/uploads/2016/12/logo.png

结果是:

http://domainname.me/wp-content/uploads/2016/12/logo.png

答案 3 :(得分:0)

你可以从这开始:

[even.append(x) if x % 2 == 0 else odd.append(x) for x in l if isinstance(x, int)]

这会将偶数数字设置为evenoddodd。对于tupleslistsdicts,您需要(如Marco所述)for循环中的if-else序列。