在python的列表中拆分列表的元素

时间:2015-10-10 19:30:50

标签: python list split

我是Python新手。如何从列表中的许多列表中创建单个列表? 例如,

let group = dispatch_group_create();

//Execute First
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
self.LoadFirst("https://www.example.com/first.php", username: MyVariables.username as String)
});

//After Above is Finished then Execute
dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
self.LoadSecond("https://www.example.com/second.php", username: MyVariables.username as String!)
}); 

输出应为:

list1 = ['aplle', 'grape', ['aplle1', 'grape1'] ]

该列表包含数千个元素。

5 个答案:

答案 0 :(得分:4)

flatten中使用compiler.ast

>>>> from compiler.ast import flatten
>>>> list1 = ['apple', 'grape', ['apple1', 'grape1', ['apple2', 'grape2'] ] ]
>>>> flattened_list = flatten(list1)

<强>输出
    [&#39; apple&#39;,&#39; grape&#39;,&#39; apple1&#39;,&#39; grape1&#39;,&#39; apple2&#39;,&#39; grape2&#39;]

这适用于多个嵌套级别

PS:但是这个软件包已经在Python3中删除了

答案 1 :(得分:2)

我也是python的新手,所以这可能是一种更简单的方式,但这似乎有效。

list1 = ['aplle', 'grape', ['aplle1', 'grape1'] ]
list2 = []
for x in list1:
    list2 += x if type(x) == list else [x]
print(list2)

如果列表中的元素本身是嵌套列表,则无效。但我认为它符合问题的要求。

答案 2 :(得分:1)

那是有效的

def main(lis):
    new_list = []
    for i in lis:
        if type(i) != list:
            new_list.append(i)
        else:
            for t in range(len(i)):
                new_list.append(i[t])
    return new_list

if __name__ == '__main__':
    print(main([1,2,3,[4,5]]))

答案 3 :(得分:0)

以下是按列表顺序拆分列表中列表元素的工作解决方案。

输入清单:

list1 = ['aplle', 'grape', ['aplle1', 'grape1'],'apple3',['apple2','grape2'] ]

以下是代码:

for obj in list1:
    if type(obj) is list:
        i = list1.index(obj)
            for obj1 in obj:
                list1.insert(i,obj1)
            list1.remove(obj)

根据需要按顺序输入输出:

list1 = ['aplle', 'grape', 'grape1', 'aplle1', 'apple3', 'grape2', 'apple2']

答案 4 :(得分:0)

我喜欢Cristian的这个解决方案,它很通用。 flatten

def flatten(l):
import collections
    for el in l:
        if isinstance(el, collections.Iterable) and not isinstance(el, (str, bytes)):
            for sub in flatten(el):
                yield sub
        else:
            yield el


print(list(flatten(['aplle', 'grape', ['aplle1', 'grape1']])))

['aplle', 'grape', 'aplle1', 'grape1']