鱼C论坛

 找回密码
 立即注册
查看: 4180|回复: 9

怎么用循环语句解决,方法越多越好

[复制链接]
发表于 2017-6-26 10:13:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Lisa']
        ]
怎么用循环语句将list里面的每个名字都打印出来,方法越多越好
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-26 11:38:04 | 显示全部楼层
对于本例简单粗暴的方法就按下面这么写:
  1. for item in L:
  2.         if isinstance(item, list):
  3.                 for i in item:
  4.                         print(i)
  5.         else:print(item)
复制代码

但是,这种方法有很大的问题,就是只能针对一层嵌套的list使用,多了就不行,所以可以用自定义函数的方式来解决
  1. def printList(list_item):
  2.     for each in list_item:
  3.         if isinstance(each, list):
  4.             printList(each)
  5.         else:
  6.             print(each)
复制代码

这样的话,无论多少层嵌套都能适用
  1. >>> L = [
  2.     ['Apple', ['Google', 'Microsoft']],
  3.     ['Java', ['Python', ['Ruby', 'PHP']]],
  4.     ['Adam', 'Bart', 'Lisa']
  5.         ]
  6. >>> printList(L)
  7. Apple
  8. Google
  9. Microsoft
  10. Java
  11. Python
  12. Ruby
  13. PHP
  14. Adam
  15. Bart
  16. Lisa
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-26 14:33:26 | 显示全部楼层
  1. #最基本的方法,缺点是列表层次不同的话就不能通用
  2. for i in L:
  3.   for x in i:
  4.     print(x)

  5. #一次偶然学到的方法,缺点同上   
  6. for i in sum(L,[]):
  7.   print(i)

  8. #反正能通用,自我感觉没有缺点  
  9. newlist = eval("["+str(L).replace("[","").replace("]","")+"]")
  10. for i in newlist:
  11.   print(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 14:46:32 | 显示全部楼层
shuofxz 发表于 2017-6-26 11:38
对于本例简单粗暴的方法就按下面这么写:

但是,这种方法有很大的问题,就是只能针对一层嵌套的list使用 ...

的确,用递归是比较好的,这个例子其实跟递归读取文件夹的子文件很相似
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 15:00:40 | 显示全部楼层

涨知识了,第一次知道还有eval()这么个函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 15:22:18 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-6-26 15:25 编辑
  1. import re
  2. for each in filter(str,re.findall("(\w*)",str(L))):
  3.     print(each)
复制代码


原谅我的渣正则

我记得还有一个专门用来拍平列表的函数,忘记名字了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 16:09:37 | 显示全部楼层
这样是不是很酷~
  1. >>> L = [
  2.     ['Apple', ['Google', 'Microsoft']],
  3.     ['Java', ['Python', ['Ruby', 'PHP']]],
  4.     ['Adam', 'Bart', 'Lisa']
  5. ]
  6. >>> print(str(L).translate(''.maketrans(',','\n',"' []")))
  7. Apple
  8. Google
  9. Microsoft
  10. Java
  11. Python
  12. Ruby
  13. PHP
  14. Adam
  15. Bart
  16. Lisa
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 16:21:55 | 显示全部楼层
ooxx7788 发表于 2017-6-26 15:22
原谅我的渣正则

我记得还有一个专门用来拍平列表的函数,忘记名字了。

for each in re.findall(r"\w+",str(L)):

应该这样写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 16:33:36 | 显示全部楼层
SixPy 发表于 2017-6-26 16:21
for each in re.findall(r"\w+",str(L)):

应该这样写

多谢大佬指点。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 20:57:05 | 显示全部楼层
本帖最后由 和vvv 于 2017-6-26 21:38 编辑

针对你给出的列表,可以这样:
  1. #*代表可变参数
  2. for x,*y in L:
  3.     print(x)
  4.     print('\n'.join(y))
复制代码

或者:
  1. for i in range(0,len(s)):
  2.     print("\n".join(L[i]))
复制代码


多层嵌套的话,这个就不行了,上面的方法不错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-22 03:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表