Python 如何收集列表的第一个坐标并合并列表的所有坐标?

Python 如何收集列表的第一个坐标并合并列表的所有坐标?,python,list,Python,List,我有一个列表all_a,它的每个元素都是长度为2的列表。我想收集第一个坐标并合并所有坐标。我用一个循环来做这件事,这个循环对于大的all\u a来说似乎效率不高 你能详细说明一种更有效/更快的方法吗 a1 = ['a', ['link1', 'link2']] a2 = ['b', ['link3']] a3 = ['c', ['link4', 'link5', 'link6']] a4 = ['d', []] all_a = [a1, a2, a3, a4] first = [] secon

我有一个列表
all_a
,它的每个元素都是长度为2的列表。我想收集第一个坐标并合并所有坐标。我用一个循环来做这件事,这个循环对于大的
all\u a
来说似乎效率不高

你能详细说明一种更有效/更快的方法吗

a1 = ['a', ['link1', 'link2']]
a2 = ['b', ['link3']]
a3 = ['c', ['link4', 'link5', 'link6']]
a4 = ['d', []]

all_a = [a1, a2, a3, a4]
first = []
second = []

for a in all_a:
    first.append(a[0])
    second += a[1]
预期结果是
first=['a','b','c','d']
second=['link1','link2','link3','link4','link5','link6']

a1 = ['a', ['link1', 'link2']]
a2 = ['b', ['link3']]
a3 = ['c', ['link4', 'link5', 'link6']]
a4 = ['d', []]

all_a = [a1, a2, a3, a4]
也许这正是你想要的。将列表转换为集合是一种线性操作,可以降低结果的复杂性

列出第一个元素。 使第二个元素的集合并集,将最终结果返回列表

first = [item[0] for item in a]
second = set()
for item in all_a:
    second = second.union(set(item[1]))
second
处理可以转换为一行
map
应用程序,但它更难读取

也许这正是你想要的。将列表转换为集合是一种线性操作,可以降低结果的复杂性

列出第一个元素。 使第二个元素的集合并集,将最终结果返回列表

first = [item[0] for item in a]
second = set()
for item in all_a:
    second = second.union(set(item[1]))
第二个
处理可以转换为一行
映射
应用程序,但更难读取。

给定数据:

a1 = ['a', ['link1', 'link2']]
a2 = ['b', ['link3']]
a3 = ['c', ['link4', 'link5', 'link6']]
a4 = ['d', []]
您的解决方案似乎足够有效,但这可能正是您想要的: 对于第一组,您可以执行以下操作:

first = [a[0] for a in all_a]
对于第二种情况,这将创建一个列表列表

second = [a[1] for a in all_a if len(a[1]) > 0] #this will create a list of lists
second = [item for sublist in second for item in sublist] #this will create a list of lists and will do the required job.
编辑:也可以用两行文字代替“编辑”,您只需写下:

second = [item for sublist in (a[1] for a in all_a) for item in sublist]
这将产生以下预期输出:

第一个:['a','b','c','d',第二个:['link1','link2','link3','link4','link5','link6']

给定数据:

a1 = ['a', ['link1', 'link2']]
a2 = ['b', ['link3']]
a3 = ['c', ['link4', 'link5', 'link6']]
a4 = ['d', []]
您的解决方案似乎足够有效,但这可能正是您想要的: 对于第一组,您可以执行以下操作:

first = [a[0] for a in all_a]
对于第二种情况,这将创建一个列表列表

second = [a[1] for a in all_a if len(a[1]) > 0] #this will create a list of lists
second = [item for sublist in second for item in sublist] #this will create a list of lists and will do the required job.
编辑:也可以用两行文字代替“编辑”,您只需写下:

second = [item for sublist in (a[1] for a in all_a) for item in sublist]
这将产生以下预期输出:


第一个:['a','b','c','d',第二个:['link1','link2','link3','link4','link5','link6']

请解释您所期望的“高效”。您当前的解决方案是一个简单的线性循环(尽管合并成本较高)。这似乎很容易理解。@Prune我希望有一个更快的方法。请解释一下你所期望的“高效”。您当前的解决方案是一个简单的线性循环(尽管合并成本较高)。这似乎很容易理解。@Prune我希望有一个更快的方法。