为了账号安全,请及时绑定邮箱和手机立即绑定

遍历列表列表和单个元素

遍历列表列表和单个元素

慕雪6442864 2023-06-20 14:41:53
给定以下列表,a = [[1,2,3],1,[1,2,43,5],[1,23,4,4],6.5,[1,1,2,45]]我想了解它的所有要素。如您所见,当子集只有一个元素时,我没有 1 的列表,只有元素。所以当然这是行不通的,因为的第二个元素a是不可迭代的,for x in a:    for i in x:        print(i)        #do much more错误:   for i in x:TypeError: 'int' object is not iterable我可以执行以下操作,但我发现它很不方便,因为我必须复制代码,或者调用部分中的函数'#do much more。任何想法?for x in a:    if type(x) is list:        for i in x:            print(i)            #do much more    else:        print(x)        #do much more (the same as above)
查看完整描述

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


查看完整回答
反对 回复 2023-06-20
?
慕哥6287543

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 中运行它来验证它。


查看完整回答
反对 回复 2023-06-20
?
拉风的咖菲猫

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


查看完整回答
反对 回复 2023-06-20
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

编写一个递归函数来为你做这件事:


def print_my_list(lst):

    for elem in lst:

        if type(elem) is list:

            print_my_list(elem)

        else:

            print(elem)

一件好事是,这将适用于相互嵌套的任意数量的列表,将它们全部“展平”。


查看完整回答
反对 回复 2023-06-20
  • 4 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信