Python:每日一题 23(答题领鱼币)
出一道简单的题。把一个嵌套的多维列表变为一维列表,如:list1 = , , [, 7], , 11], 12], 13]]
变为
方法越简单越好。
感谢@冬雪雪冬 提供的题目!(虽然我不会......)
**** Hidden Message *****
欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@lumber2388779 @ooxx7788
{:10_298:} 点我上车{:10_298:} @冬雪雪冬 @lumber2388779 @ooxx7788 @gopythoner
来吧~ em=[] # 定义空列表
def main(li):
global em #定义全局变量
for each in li:
x = isinstance(each, list) #判断元素是否是列表
if not x:
em.append(each)
else:
main(each) # 递归
return em # -*- coding: utf -8 -*-
def list_app(old_list, new_list = list()):
"""#isinstance去判断遍历的l是不是还是一个list'
'如果还是list,用递归继续反复遍历'"""
for l in old_list:
if isinstance(l, list):
list_app(l) # 调用递归
else:
# 如果不是,把l添加进一个新的list
new_list.append(l)
return new_list
#开始工作
oldlist = ['a0',['a1','a2'],['a3',['a4',['a5','a6'],'a7'],'a8'],['a9','a10']]
print(list_app(oldlist))
打印结果>>>['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'a10']
{:10_245:}新手,用了递归可以很简单实现. list1 = , , [, 7], , 11], 12], 13]]
print(list1)
print(list(map(int, str(list1).replace('[', '').replace(']', '').split(','))))
一行够不够简单?
就是这样估计冬雪雪冬要骂我。
, , [, 7], , 11], 12], 13]]
dori233 发表于 2017-4-8 16:57
打印结果>>>['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'a10']
新手, ...
天才程序员用递归,你是天才! ooxx7788 发表于 2017-4-8 16:59
一行够不够简单?
就是这样估计冬雪雪冬要骂我。
很简单,我也仿照写一个。
list1 = , , [, 7], , 11], 12], 13]]
print(')) for i in str(list1).split(',')]) 本帖最后由 ooxx7788 于 2017-7-17 15:00 编辑
冬雪雪冬 发表于 2017-4-8 20:02
很简单,我也仿照写一个。
def foo3(list1):
"""
列表压平
"""
flat = lambda L: sum(map(flat, L), []) if isinstance(L, list) else
print(flat(list1))
list1 = , , [, 7], , 11], 12], 13]]
foo3(list1)
其实还有这一种,也是一句完成,不过这是参照别人的! 冬雪雪冬 发表于 2017-4-8 20:02
很简单,我也仿照写一个。
{:10_277:} ooxx7788 发表于 2017-4-8 21:40
其实还有这一种,也是一句完成,不过这是参照别人的!
{:10_277:} 本帖最后由 gopythoner 于 2017-4-8 22:13 编辑
来罗,看我的,曲线救国方法
list1 = , , [, 7], , 11], 12], 13]]
str1 = str(list1).replace("[","").replace("]","")
str2 = "["+str1+"]"
newlist = eval(str2)
print(newlist)
输出得到你要的,没毛病 本帖最后由 jerryxjr1220 于 2017-4-9 07:35 编辑
我也来写一个,上面用递归其实是深度优先搜索(DFS),那我就再写一个广度优先搜索(BFS)。广度优先搜索用循环可以达到递归同样的目的。
list1 = , , [, 7], , 11], 12], 13]]
newlist = []
while list1:
sublist = list1.pop()
if isinstance(sublist,list):
list1.extend(sublist)
else:
newlist.insert(0,sublist)
print newlist 眼花缭乱!默默地转身 Python 3.5.X
windows版的python都自带Tkinter模块
from tkinter import _flatten
list1 = , , [, 7], , 11], 12], 13]]
print(list(_flatten(list1))) 旁门左道ゝ 发表于 2017-4-9 15:06
Python 3.5.X
windows版的python都自带Tkinter模块
这这这...大佬啊...这tkinter怎么还有这用函数 旁门左道ゝ 发表于 2017-4-9 15:06
Python 3.5.X
windows版的python都自带Tkinter模块
这个函数我也不知道,学习了! 76666 对于新手来说,小甲鱼说合适才是最好的,看到课后题 ,联想起 可以新建一个列表进行覆盖,你说可以吗? ljs9061 发表于 2017-4-9 16:48
对于新手来说,小甲鱼说合适才是最好的,看到课后题 ,联想起 可以新建一个列表进行覆盖,你说可以吗?
s获得具体点,举个例子 转换成字符串再处理
list1 = , , [, 7], , 11], 12], 13]]
list1=str(list1)
list1=list1.replace('[','')
list1=list1.replace(']','')
list1=list1.replace(',','')
list1=
print(list1)