2

サブリストの数が不明なリストがあります。常に 1 つのサブリストを他のすべてのサブリストと比較したい。位置 0、3、および 5 の最初のサブリストの値が他のサブリストと等しい場合、一致するすべてのリストの位置 7 の値を合計したいと考えています。そして、7 番目の位置にある (新しく追加された値) を持つこの最初のサブリストを新しいリストに追加します。

list = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '1'], 
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3'], 
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2'], 
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '2'], 
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2'],.....]

出力:

new_list = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '6'], 
             ['D', 'r', 's', 'E', 't', 'u', 'F', 4],...]

私はこのコードを書きました

def Inter(list):
a = 0
b = 3 
c = 5 
d = 0
x = [] 

for i in range(len(list)): 
    for y in range(len(list)):
        if list[i][a] == list[y][a] and list[i][b] == list[y][b] and list[i][c] == list[y][c]: 
            IntSumtemp = []
            IntSumtemp.append(str(float(list[i][7]) + float(list[y][7])))
            x.append(list[i] + IntSumtemp) 
            del (x[d][7])
            d +=1
        else: None
return x
new_list= Inter(list)

しかし、それはこの出力を与えました:

new_list= [['A', 'a', 'b', 'B', 'c', 'd', 'C', '2.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '6.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '5.0'], 
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'], 
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '5.0'], 
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'], 
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'],
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0']]

誰かがこれを手伝ってくれますか?(超初心者なので分からない事があれば聞いてください...)

4

1 に答える 1

1

このアプローチは、O(N^2) であったあなたのアプローチとは対照的に、O(N) です。

from collections import OrderedDict
from operator import itemgetter

items = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '1'], 
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3'], 
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2'], 
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '2'], 
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2']]


key = itemgetter(0, 3, 5)
d = OrderedDict()

for x in items:
    d.setdefault(key(x), x[:7] + [0])[7] += int(x[7])

print d.values()

[['A', 'a', 'b', 'B', 'c', 'd', 'C', 6], ['D', 'r', 's', 'E', 't', 'u', 'F', 4]]
于 2013-06-15T21:38:21.053 に答える