Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表收缩_Python_List_Sorting - Fatal编程技术网

Python列表收缩

Python列表收缩,python,list,sorting,Python,List,Sorting,我在实现python算法时遇到问题,该算法执行以下操作: (这是尝试实现朋友之友算法的一部分) 给出一个表格[[a,b],[c,d],[e,f],…]的列表 我想创建一个新的表单列表[[a,a1,a2,a3,],[b,b1,b2,b3,],[c,c1,c2,c3,…] 让这一点更清楚的例子如下:给出一个列表 [0,1]、[0,4]、[0,3]、[0423]、[1232]、[1,2]、[2444]、[2,12]] 我希望输出以第一个整数对所有元素进行分组,这样输出将是 [0,1,4,3432],[

我在实现python算法时遇到问题,该算法执行以下操作: (这是尝试实现朋友之友算法的一部分)

给出一个表格[[a,b],[c,d],[e,f],…]的列表 我想创建一个新的表单列表[[a,a1,a2,a3,],[b,b1,b2,b3,],[c,c1,c2,c3,…]

让这一点更清楚的例子如下:给出一个列表 [0,1]、[0,4]、[0,3]、[0423]、[1232]、[1,2]、[2444]、[2,12]]

我希望输出以第一个整数对所有元素进行分组,这样输出将是 [0,1,4,3432],[1,232,2],[2444,12]]

注意:我已经根据每个项目中的第一个元素对输入列表进行了排序

一段时间以来,我一直困惑于如何以一种有效率的方式实施这一点,我很想得到一些关于如何实施这一点的建议

最后,我想把所有“喜欢”的术语结合起来。我的意思是以上面的例子为例,而不是得到输出[[0,1,4,3432],[1,232,2],[2444,12]] [[0,1,4,3432],[1,232,2,444,12]],其中“2”项及其共享元素已加入与“1”项关联的元素,因为1与2关联。最后一部分可能会让人困惑,但如果它有意义,建议也会受到欢迎!否则忽略最后一部分。=]再次感谢

谢谢

试试这个:

from collections import defaultdict

friends = defaultdict(set)
friendpairs =  [[0,1], [0,4], [0,3], [0,432], [1,232], [1,2], [2,444], [2,12]]

for f1,f2 in friendpairs : friends[f1].add(f2)

friendOfFriends = dict( (guy,fr.copy()) for guy,fr in friends.iteritems())

for f1 in friendOfFriends:
    for f2 in friends[f1]:
        friendOfFriends[f1].update(friends[f2])
UPD:您还可以将最后一行替换为

        friendOfFriends[f1].update(friends.get(f2,()))

要使用
itertools.groupby()
friends
collection

中预先设置空集的显示,请执行以下操作:

使用字典:

result = {}
for k, v in data:
    result.setdefault(k, []).append(v)
result = sorted([k] + v for k, v in result.iteritems())

如果没有
部分,您只需执行以下操作:

>>> a = [[0,1], [0,4], [0,3], [0,423], [1,232], [1,2], [2,444], [2,12]]
>>> d = dict()
>>> for x, y in a:
...     if x in d:
...             d[x].append(y)
...     else:
...             d[x] = [y]
...
>>> d
{0: [1, 4, 3, 423], 1: [232, 2], 2: [444, 12]}
>>> [[x] + d[x] for x in d]
[[0, 1, 4, 3, 423], [1, 232, 2], [2, 444, 12]]

这是一个快速而简单的方法:

data=iter([[0,1], [0,4], [0,3], [0,423], [1,232], [1,2], [2,444], [2,12]])
result = [next(data)]

for pair in  data:
    if result[-1][0]==pair[0]:
        result[-1].append(pair[1])
    else:
        result.append(pair)

print result
"[[0, 1, 4, 3, 423], [1, 232, 2], [2, 444, 12]]"
temp=[[0,1]、[0,4]、[0,3]、[0432]、[1232]、[1,2]、[2444]、[2,12]]
temp1=set()
temp2=dict()
对于临时工:
first=i[0]
秒=i[1]
如果在temp1中第一个:
temp2[第一]=temp2[第一]+[第二]
其他:
temp2[第一]=[第二]
temp1.add(i[0])

这里,temp2将获得所需的结果

你试过什么?你追求的是一种高效的方法;你能发布你的“低效”版本吗?嗯,我还没有找到任何可以做到这一点的方法,这就是我决定寻求帮助的原因。听起来你应该调查数据结构。既然你有[0,1]和[1,2],为什么你会得到
[[0,1,4,3432],[1,232,2,444,12]
?如果你的目标是我认为你的目标,然后应该是相关的。谢谢,我相信这完美地解决了我的问题…现在我只需要阅读这里到底发生了什么
data=iter([[0,1], [0,4], [0,3], [0,423], [1,232], [1,2], [2,444], [2,12]])
result = [next(data)]

for pair in  data:
    if result[-1][0]==pair[0]:
        result[-1].append(pair[1])
    else:
        result.append(pair)

print result
"[[0, 1, 4, 3, 423], [1, 232, 2], [2, 444, 12]]"