我正在尝试解决问题
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)
答案 0 :(得分:4)
如果当前元素为fun
,list
或tuple
,则必须递归调用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)]
这会将偶数数字设置为even
和odd
到odd
。对于tuples
,lists
和dicts
,您需要(如Marco所述)for
循环中的if-else序列。