2

だから私はリストのbiiiiigリストを持っています、次のようになります:

big_list = [[17465, [22, 33, 1, 7, 83, 54, 84, -5], '123-432-3'], [13254, [42, 64, 4, -5, 75, -2, 1, 6], '1423-1762-4'], [...........................................................................................................], [17264, [22, 75, 54, 2, 87, 12, 23, 86], '14234-453-1']]

リストのリスト全体を循環する必要があり、同じである2つ以上の文字列(各内部リストの要素[2]、たとえば「123-423-3」)を検出すると、intのリスト(要素[ 1]) 検出された最後の同じ値の文字列に関連する int のリストを使用して、その文字列に関連します。

4

3 に答える 3

1

のどこかに一致する文字列を探している場合、これが私の解決策ですbig_list

>>> from collections import OrderedDict
>>> big_list = [[17465, [1, 2, 3], '123-432-3'], [13254, [4, 5, 6], '1423-1762-4'], [17264, [7, 8, 9], '14234-453-1'], [12354, [10, 11, 12], '14234-453-1'], [12358, [13, 14], '14234-453-1'], [99213, [15], '123-999-3'], [27461, [16, 17, 18], '123-432-3']]
>>> def amalgamate(seq):
        d = OrderedDict()
        for num, ints, text in big_list:
            d.setdefault(text, [num, [], text])[1].extend(ints)
        return d.values()

>>> amalgamate(big_list)
[[17465, [1, 2, 3, 16, 17, 18], '123-432-3'], [13254, [4, 5, 6], '1423-1762-4'], [17264, [7, 8, 9, 10, 11, 12, 13, 14], '14234-453-1'], [99213, [15], '123-999-3']]
于 2012-07-31T11:12:01.920 に答える
1

これで問題が解決すると思います。

big_list = [[17465, [22, 33, 1, 7, 83, 54, 84, -5], '123-432-3'], \
            [13254, [42, 64, 4, -5, 75, -2, 1, 6], '1423-1762-4'], \
            [17264, [22, 75, 54, 2, 87, 12, 23, 86], '14234-453-1']]


# adding same string element to big_list
big_list.append([22222, [10, 12, 13], '14234-453-1'])
#now should itterate big_list, and when '14234-453-1' is found in 2 inner lists.
#it will put the values [10, 12, 13] into the first instance and remove the second.

print "Before:"
for l in big_list:
      print l

seen_list = {}
del_list = []
for inner in xrange(len(big_list)):
      if big_list[inner][2] in seen_list:
            for item in big_list[inner][1]:
                  big_list[seen_list[big_list[inner][2]]][1].append(item)
            del_list.append(inner)
      else:
            seen_list[big_list[inner][2]] = inner

for i in reversed(del_list):
      del big_list[i]

print "after:"

for l in big_list:
      print l

結果:

>>> 
Before:
[17465, [22, 33, 1, 7, 83, 54, 84, -5], '123-432-3']
[13254, [42, 64, 4, -5, 75, -2, 1, 6], '1423-1762-4']
[17264, [22, 75, 54, 2, 87, 12, 23, 86], '14234-453-1']
[22222, [10, 12, 13], '14234-453-1']
after:
[17465, [22, 33, 1, 7, 83, 54, 84, -5], '123-432-3']
[13254, [42, 64, 4, -5, 75, -2, 1, 6], '1423-1762-4']
[17264, [22, 75, 54, 2, 87, 12, 23, 86, 10, 12, 13], '14234-453-1']
于 2012-07-31T10:53:56.140 に答える
0

現在の形式では質問は不明確ですが、これはあなたが探しているものかもしれません(これは連続した一致で機能します):

>>> from itertools import groupby
>>> from operator import itemgetter
>>> big_list = [[17465, [1, 2, 3], '123-432-3'], [13254, [4, 5, 6], '1423-1762-4'], [17264, [7, 8, 9], '14234-453-1'], [12354, [10, 11, 12], '14234-453-1'], [12358, [13, 14], '14234-453-1'], [99213, [1], '123-999-3']]
>>> def amalgamate(seq):
        for k, g in groupby(seq, itemgetter(2)):
            num, ints, text = next(g)
            for sublist in g:
                ints.extend(sublist[1])
            yield [num, ints, text]


>>> list(amalgamate(big_list))
[[17465, [1, 2, 3], '123-432-3'], [13254, [4, 5, 6], '1423-1762-4'], [17264, [7, 8, 9, 10, 11, 12, 13, 14], '14234-453-1'], [99213, [1], '123-999-3']]
于 2012-07-31T10:51:12.117 に答える