【发布时间】:2023-02-22 12:34:00
【问题描述】:
l=["Sai", "prasad", 1234,12.34, [1,2,3,4]]
def filter_int(l):
l1=[]
for i in l:
if type(i)==int or type(i)==float:
l1.append(i)
elif type(i)==list:
for j in i:
l1.append(j)
return l1
filter_int(l)
# i tried this
l=["Sai", "prasad", 1234,12.34, [1,2,3,4]]
def filter_int(l):
l1=[]
[l1.append(i) if type(i)==int or type(i)==float else l1.append(i) if type(i)==list else i for i in l]
return l1
filter_int(l)
我现有的输出是
[1234, 12.34, [1, 2, 3, 4]]
我的预期输出是
[1234, 12.34, 1, 2, 3, 4]
(..我想要上面列表理解的输出)
【问题讨论】:
-
不要对副作用使用列表理解。列表理解的要点是收集列表中生成器表达式的所有值。通过对副作用使用列表理解,您创建了一个无用的列表。只使用常规的 for 循环更有效
-
你在滥用列表理解for side effects。我认为您的预期输出在单个列表组合中实际上是不可能的,至少不是干净的。