新手·ing 发表于 2017-4-8 15:41:36

Python:每日一题 23(答题领鱼币)

出一道简单的题。把一个嵌套的多维列表变为一维列表,如:
list1 = , , [, 7], , 11], 12], 13]]
变为

方法越简单越好。


感谢@冬雪雪冬 提供的题目!(虽然我不会......)


**** Hidden Message *****


欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@lumber2388779 @ooxx7788
{:10_298:} 点我上车{:10_298:}

新手·ing 发表于 2017-4-8 15:42:07

@冬雪雪冬 @lumber2388779 @ooxx7788 @gopythoner
来吧~

六道土豆 发表于 2017-4-8 16:41:47

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

dori233 发表于 2017-4-8 16:57:09

# -*- 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:}新手,用了递归可以很简单实现.

ooxx7788 发表于 2017-4-8 16:59:31

list1 = , , [, 7], , 11], 12], 13]]
print(list1)
print(list(map(int, str(list1).replace('[', '').replace(']', '').split(','))))

一行够不够简单?
就是这样估计冬雪雪冬要骂我。

, , [, 7], , 11], 12], 13]]

ooxx7788 发表于 2017-4-8 17:01:25

dori233 发表于 2017-4-8 16:57
打印结果>>>['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'a10']
新手, ...

天才程序员用递归,你是天才!

冬雪雪冬 发表于 2017-4-8 20:02:17

ooxx7788 发表于 2017-4-8 16:59
一行够不够简单?
就是这样估计冬雪雪冬要骂我。

很简单,我也仿照写一个。
list1 = , , [, 7], , 11], 12], 13]]
print(')) for i in str(list1).split(',')])

ooxx7788 发表于 2017-4-8 21:40:20

本帖最后由 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)

其实还有这一种,也是一句完成,不过这是参照别人的!

新手·ing 发表于 2017-4-8 21:50:00

冬雪雪冬 发表于 2017-4-8 20:02
很简单,我也仿照写一个。

{:10_277:}

新手·ing 发表于 2017-4-8 21:50:12

ooxx7788 发表于 2017-4-8 21:40
其实还有这一种,也是一句完成,不过这是参照别人的!

{:10_277:}

gopythoner 发表于 2017-4-8 22:11:11

本帖最后由 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:20:33

本帖最后由 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

朝闻夕死 发表于 2017-4-9 11:16:38

眼花缭乱!默默地转身

旁门左道ゝ 发表于 2017-4-9 15:06:15

Python 3.5.X
windows版的python都自带Tkinter模块

from tkinter import _flatten
list1 = , , [, 7], , 11], 12], 13]]
print(list(_flatten(list1)))

新手·ing 发表于 2017-4-9 15:08:19

旁门左道ゝ 发表于 2017-4-9 15:06
Python 3.5.X
windows版的python都自带Tkinter模块

这这这...大佬啊...这tkinter怎么还有这用函数

jerryxjr1220 发表于 2017-4-9 16:24:28

旁门左道ゝ 发表于 2017-4-9 15:06
Python 3.5.X
windows版的python都自带Tkinter模块

这个函数我也不知道,学习了!

小飞22 发表于 2017-4-9 16:38:00

76666

ljs9061 发表于 2017-4-9 16:48:22

对于新手来说,小甲鱼说合适才是最好的,看到课后题 ,联想起 可以新建一个列表进行覆盖,你说可以吗?

新手·ing 发表于 2017-4-9 17:07:57

ljs9061 发表于 2017-4-9 16:48
对于新手来说,小甲鱼说合适才是最好的,看到课后题 ,联想起 可以新建一个列表进行覆盖,你说可以吗?

s获得具体点,举个例子

余欲渔 发表于 2017-4-11 12:46:01

转换成字符串再处理
list1 = , , [, 7], , 11], 12], 13]]
list1=str(list1)
list1=list1.replace('[','')
list1=list1.replace(']','')
list1=list1.replace(',','')
list1=
print(list1)
页: [1] 2 3 4 5
查看完整版本: Python:每日一题 23(答题领鱼币)