笑星星 发表于 2024-1-18 21:14:12

循环嵌套结果?

图1是编程,图2 是first 执行的结果,图3是second执行的结果,我想知道为啥图3的结果和图2的结果存在差别原因,我想把图3的结果变成图2的结果的模式要怎样修改,谢谢!


#循环嵌套
list1 = ['11001','孙悟空','男','29']
list2 = ['11002','猪八戒','男','39']
list3 = ['11003','沙悟净','男','49']
list4 = ['11004','白龙马','男','59']
listA =
listB =
listc =
#first
##for i in range(len(listA)):
##   for x in listA:
##         print(x,end = '#')
##   print()
#second
for n1 in range(len(listc)):
    for x in listc:   
      print(x)
      for n2 in range(len(x)):
            for y in x:
                #print(y)
                print(y,end = '#')
            print()

FishC 发表于 2024-1-18 21:14:58

在图3的代码中,第一个循环`for n1 in range(len(listc)):`用于遍历`listc`列表中的元素,而第二个循环`for x in listc:`用于遍历`listc`列表中的每个元素,也就是一个个子列表。然后,第三个循环`for n2 in range(len(x)):`用于遍历每个子列表`x`中的元素,而第四个循环`for y in x:`用于遍历每个子列表`x`中的每个元素。

所以,在第二个循环中,每次遍历到的`x`是一个子列表,第三个循环会根据这个子列表的长度来执行相应次数的迭代。而在第四个循环中,每次遍历到的`y`是子列表中的元素。

因此,图2和图3的输出结果存在差别是因为图2中只遍历了一次`listA`,而图3中遍历了多次`listc`以及其中的子列表。

如果你想将图3的输出结果变成图2的模式,可以参考以下代码修改第二个循环:

for x in listA:
    for n2 in range(len(x)):
      for y in x:
            print(y, end='#')
      print()

这样,我们直接遍历`listA`中的每个元素,而不是遍历`listc`中的每个元素。这样就可以实现与图2相似的输出结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

笑星星 发表于 2024-1-18 21:44:44

请问我是想从listc开始遍历,并把listc最底层的列表的每个元素遍历出来,例如:
11001 孙悟空 男 29
11002 猪八戒 男 39
······
11004 白龙马 男 59
并且我想了解有无规律对于多层循环嵌套的遍历

FishC 发表于 2024-1-18 21:45:51

笑星星 发表于 2024-01-18 21:44
请问我是想从listc开始遍历,并把listc最底层的列表的 ...

如果你想从`listc`开始遍历,并且将最底层列表的每个元素提取出来,可以使用递归进行多层循环嵌套的遍历。

下面是一个示例代码,用于实现你的需求:

def traverse_list(lst):
    for item in lst:
      if isinstance(item, list):
            traverse_list(item)# 递归调用自身进行下一层的遍历
      else:
            print(item, end=' ')

listc = [, "孙悟空", "男", , "猪八戒", "男", 39, , "白龙马", "男", 59]

traverse_list(listc)

这段代码中定义了一个名为`traverse_list`的函数,它接受一个列表作为参数。函数首先遍历传入的列表,对于每个元素,如果是一个子列表,就通过递归调用`traverse_list`函数来遍历下一层。如果是最底层的元素,则直接打印输出。

这样,调用`traverse_list(listc)`即可实现从`listc`开始的多层循环嵌套的遍历,并输出最底层列表的每个元素。

对于多层循环嵌套的遍历,没有固定的规律,需要根据具体的数据结构来设计遍历方法。可以利用递归来处理多层的嵌套关系,不断深入到下一层进行遍历,直到达到最底层为止。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-1-18 22:58:59

本帖最后由 jackz007 于 2024-1-19 01:12 编辑

      图3的问题是你对字符串也用了 for ... in 来分解,那么,枚举到的自然就是字符串中的每一个字符,而这并不是我们所想要的效果,所以,只能把for ... in 循环使用到列表的层级,只要枚举到列表中的每一个元素('11001'、'孙悟空'、'男'、'29')就可以了。就本例而言,本来应该用到 3 层嵌套,而你却用了 4 层。所以,就出了问题。
      建议代码这样改:
. . . . . .
#second
for i in listc :
    for j in i :
      for k in j :
            print(k , end = '#')
      print()

笑星星 发表于 2024-1-19 18:17:30

图3的问题是你对字符串也用了 for ... in 来分解,那么,枚举到的自然就是字符串中的每一个字符,而这并不是我们所想要的效果,所以,只能把for ... in 循环使用到列表的层级,只要枚举到列表中的每一个元素('11001'、'孙悟空'、'男'、'29')就可以了。就本例而言,本来应该用到 3 层嵌套,而你却用了 4 层。所以,就出了问题。list1 = ['11001','孙悟空','男','29']
list2 = ['11002','猪八戒','男','39']
list3 = ['11003','沙悟净','男','49']
list4 = ['11004','白龙马','男','59']
listA =
listB =
listc =
for n1 in range(len(listc)):
    for x in listc:

      print(x)#此处枚举了最底层的列表
      for n2 in range(len(x)):
            for y in x:   #此处下标循环应该枚举到的是字符串,但结果是字符,为啥?
                #print(y)
                print(y,end = '#')#结果是字符,而我理解应该是字符串,为啥?
      print()

我从执行结果得出的结论是我的枚举到的是字符串中的每一个字符,不是我要的结果,但是我不能理解为啥会这样。您的程序我也理解了,

笑星星 发表于 2024-1-19 18:34:18

笑星星 发表于 2024-1-19 18:17
我从执行结果得出的结论是我的枚举到的是字符串中的每一个字符,不是我要的结果,但是我不能理解为啥会这 ...

我想清楚了,不用回答了,谢谢
页: [1]
查看完整版本: 循环嵌套结果?