2014-03-19 2 views
0

파이썬 목록 목록이 있습니다. 첫 번째 요소가 이미 블록에있는 행을 제거하고 싶습니다.파이썬 목록 목록에서 같은 행을 삭제하십시오.

block = [ 
    ['alfa', 'T31360N', '2013-12-19 12:07:2'], 
    ['beta', 'D41535N', '2013-12-19 12:20:1'], 
    ['gamma', 'E61460N', '2013-12-19 13:58:2'], 
    ['delta', 'D133PR01', '2013-12-19 14:19:4'], 
    ['beta', 'Q3332N', '2013-12-19 14:19:5'] 
] 

'베타'시작된 행을 목록에서 어떻게 삭제할 수 있습니까? 목록에 How do you remove duplicates from a list in whilst preserving order?을 적응

+0

당신은리스트의 목록을 의미합니까? Python에는 * block * 같은 것이 없습니다. –

+0

예. 나는 목록의 목록을 의미한다. 죄송합니다 – GergA

+0

''beta ''로 시작하는 목록을 모두 제거 하시겠습니까? 아니면 단지 두 번째? –

답변

3

:

seen = set() 
block = [row for row in block if row[0] not in seen and not seen.add(row[0])] 

는 고유의 첫 번째 요소를 가지고 행을 포함하는block를 재 구축; 주어진 첫 번째 값이있는 첫 번째 행만 유지됩니다.

그냥 고유 행을 유지하고 이상의 항목이 모든 행을 제거하려면 다음block 트림, 각각의 제 요소가 존재 얼마나 많은 시간을 추적 할 collections.Counter() object를 사용해야합니다 :

from collections import Counter 

counts = Counter(row[0] for row in block) 
block = [row for row in block if counts[row[0]] == 1] 

데모 :

>>> from pprint import pprint 
>>> from collections import Counter 
>>> block = [ 
...  ['alfa', 'T31360N', '2013-12-19 12:07:2'], 
...  ['beta', 'D41535N', '2013-12-19 12:20:1'], 
...  ['gamma', 'E61460N', '2013-12-19 13:58:2'], 
...  ['delta', 'D133PR01', '2013-12-19 14:19:4'], 
...  ['beta', 'Q3332N', '2013-12-19 14:19:5'] 
... ] 
>>> seen = set() 
>>> pprint([row for row in block if row[0] not in seen and not seen.add(row[0])]) 
[['alfa', 'T31360N', '2013-12-19 12:07:2'], 
['beta', 'D41535N', '2013-12-19 12:20:1'], 
['gamma', 'E61460N', '2013-12-19 13:58:2'], 
['delta', 'D133PR01', '2013-12-19 14:19:4']] 
>>> counts = Counter(row[0] for row in block) 
>>> pprint([row for row in block if counts[row[0]] == 1]) 
[['alfa', 'T31360N', '2013-12-19 12:07:2'], 
['gamma', 'E61460N', '2013-12-19 13:58:2'], 
['delta', 'D133PR01', '2013-12-19 14:19:4']] 
+0

'seen = []'대신'seen = set()'을하고'seen.add()'를'seen.append()'로 변경하면 어떤 이점이 있습니까? –

+0

@TomFenech : 회원제 테스트가 훨씬 빠르기 때문에 아니요. –

+0

감사합니다. 그것은 더 잘 표현되어야합니다. 네가 더 나은 길을 골랐다 고 가정했는데 왜 그랬는지 궁금해하는 구만! –

관련 문제