我是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'] ]
该列表包含数千个元素。
答案 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']