2012-03-29 58 views
0

可能重複:
join list of lists in python
Flatten (an irregular) list of lists in Python合併列表中的項目

所以,我需要使用Python合併列出的某些部分,但還是沒能解決工作。 例如,我有一個ARR列表,我想

[ 
    [1, 2, (3, 4, 5, 6, 7, 8, 9, 11, 1)], 
    [5, 6, (7, 8, 9, 10, 1)] 
] 

因此,它非常類似於SQL查詢「選擇表,其中未便= smth1 *」。下面是我的代碼,但不能很好地工作。

arr = [[1, 2, 3, 4, 5, 6], [1, 2, 6, 7, 8, 9], [1, 2, 11, 1, 5, 9], [5, 6, 7, 8, 9, 10], [5, 6, 1, 1, 1, 1]] 
    result = [] 
    for i in arr[:]: 
     for j in arr[:]: 
      if i[0] == j[0] and i[1] == j[1] and i != j: 
       a = i[:] 
       a[2:] = zip(i[2:], j[2:]) 
       result.append(a) 
+4

這個問題已經回答了很多次。 – Marcin 2012-03-29 12:25:04

+0

這是什麼意思?這很難理解......你是否想要壓扁列表項目?如果是這樣,那麼已經有很多這樣的問題了。 – jamylak 2012-03-29 12:32:23

+1

@Closevoters:請注意,目標結構是不尋常的,他們想要的不僅僅是扁平化。 – georg 2012-03-29 12:34:53

回答

1
arr = [ 
    [1, 2, 3, 4, 5, 6], 
    [1, 2, 6, 7, 8, 9], 
    [1, 2, 11, 1, 5, 9], 
    [5, 6, 7, 8, 9, 10], 
    [5, 6, 1, 1, 1, 1] 
] 

data = {} 
for sub in arr: 
    key = tuple(sub[:2]) 
    data[key] = data.get(key, set()).union(sub[2:]) 

print data 

這會產生這樣的:

{(1, 2): set([1, 3, 4, 5, 6, 7, 8, 9, 11]), (5, 6): set([8, 9, 10, 1, 7])} 

它應該是沒有問題的,讓您的結構出於此。

0

。如果產生的元組的順序並不重要,這裏是用itertools.groupby一個解決方案()

from itertools import groupby 

arr = [[1, 2, 3, 4, 5, 6], [1, 2, 6, 7, 8, 9], [1, 2, 11, 1, 5, 9], [5, 6, 7, 8, 9, 10], [5, 6, 1, 1, 1, 1]] 
arr.sort() 
print [[group[0][0], group[0][1], tuple(set(sum([sublist[2:] for sublist in group[1]], [])))] for group in groupby(arr, lambda l: l[0:2])]