4 回答
TA贡献1788条经验 获得超4个赞
一种不需要类型检查并避免重复自己的“pythonic”方法是使用所谓的 EAFP ( “请求宽恕比请求许可更容易”)编码风格。
以下是如何将其应用于此场景:
a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]
for x in a:
try:
it = iter(x)
except TypeError:
it = [x]
for i in it:
print(i)
#do much more
TA贡献1831条经验 获得超10个赞
问题是你有一个集合,其中每个元素可以是一个集合或单个元素。如果您想避免扁平化,并且@green-cloak-guy 的扁平化输出不适合您的使用,您可以在使用之前整理数据,以便您可以将其作为有保证的列表列表使用。
a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]
for x in a:
if not isinstance(x, list):
x = [x]
for i in x:
print(i)
#do much more
说真的,我不懂 python,但这应该适合你。
ps说真的,我不懂python。你只需拿起东西,我在 REPL 中运行它来验证它。
TA贡献1995条经验 获得超2个赞
您可以通过定义返回生成器的函数将附加逻辑移出循环:
def flatten(items):
for item in items:
if isinstance(item, list):
yield from flatten(item)
else:
yield item
a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]
for i in flatten(a):
print(i)
# Your logic here!
您可以验证上面代码的输出:
1
2
3
1
1
2
43
5
1
23
4
4
6.5
1
1
2
45
TA贡献1803条经验 获得超6个赞
编写一个递归函数来为你做这件事:
def print_my_list(lst):
for elem in lst:
if type(elem) is list:
print_my_list(elem)
else:
print(elem)
一件好事是,这将适用于相互嵌套的任意数量的列表,将它们全部“展平”。
添加回答
举报