鱼C论坛

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

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

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

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

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

x
L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Lisa']
        ]
怎么用循环语句将list里面的每个名字都打印出来,方法越多越好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-26 11:38:04 | 显示全部楼层
对于本例简单粗暴的方法就按下面这么写:
for item in L:
        if isinstance(item, list):
                for i in item:
                        print(i)
        else:print(item)
但是,这种方法有很大的问题,就是只能针对一层嵌套的list使用,多了就不行,所以可以用自定义函数的方式来解决
def printList(list_item):
    for each in list_item:
        if isinstance(each, list):
            printList(each)
        else:
            print(each)
这样的话,无论多少层嵌套都能适用
>>> L = [
    ['Apple', ['Google', 'Microsoft']],
    ['Java', ['Python', ['Ruby', 'PHP']]],
    ['Adam', 'Bart', 'Lisa']
        ]
>>> printList(L)
Apple
Google
Microsoft
Java
Python
Ruby
PHP
Adam
Bart
Lisa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

#反正能通用,自我感觉没有缺点  
newlist = eval("["+str(L).replace("[","").replace("]","")+"]")
for i in newlist:
  print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

的确,用递归是比较好的,这个例子其实跟递归读取文件夹的子文件很相似
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

涨知识了,第一次知道还有eval()这么个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

原谅我的渣正则

我记得还有一个专门用来拍平列表的函数,忘记名字了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 16:09:37 | 显示全部楼层
这样是不是很酷~
>>> L = [
    ['Apple', ['Google', 'Microsoft']],
    ['Java', ['Python', ['Ruby', 'PHP']]],
    ['Adam', 'Bart', 'Lisa']
]
>>> print(str(L).translate(''.maketrans(',','\n',"' []")))
Apple
Google
Microsoft
Java
Python
Ruby
PHP
Adam
Bart
Lisa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

应该这样写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

应该这样写

多谢大佬指点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

针对你给出的列表,可以这样:
#*代表可变参数
for x,*y in L:
    print(x)
    print('\n'.join(y))
或者:
for i in range(0,len(s)):
    print("\n".join(L[i]))

多层嵌套的话,这个就不行了,上面的方法不错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-21 04:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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