2012-10-16 6 views
0

나는 목록에 넣고있는 파일을 가지고 있으며, 그것을 꺼내 다른 목록에 추가하고 싶다. (나는 그다지 문제가 없다.) 문제는 제거하고있다. 첫 번째 목록에서 벗어난 것들. 아래에서 내가 시도한 것은 있지만 원래 목록에서 다른 모든 것들만 제거합니다.파이썬 목록 제거 추가

list: 
bob  g1 3110 
bob  g2 244 
bob  g3 -433 
greg fun112 10595 
greg fun113 -1203 
greg fun114 -3049.999 
greg fun115 3808 
greg fun116 320 
greg got112 -600 
greg got113 5958 
greg got114 1249 


file1 = open('test','rb').read().splitlines() 
file1=sorted(file1) 
test_group = ['fun','got'] 
test= [] 

for product in file1: 
    spt = product.split(",") 
    for line in spt: 
     if line[:3] in test_group: 
      x = test.append(product) 
      y = file1.remove(product) 

테스트 [] 목록은 내가 거기에서 원하는 항목의 모든 문제없이 갈 괜찮지 만, 내가이 file1 검토 할 경우에만 '재미'와 '가지고'라인

을 다른 모든 일을한다

왜 다른 하나씩 밖에 꺼낼 수 없으며 어떻게 수정합니까?

답변

8

반복하는 목록을 수정하지 마십시오! 그게 효과가 없을거야! 이 목록의 복사본을 만들 경우

, 그것은 작동합니다 : 당신이 사전에 이것을 시도하는 경우

for product in file1[:]: 
    spt = product.split(",") 
    for line in spt: 
     if line[:3] in test_group: 
      x = test.append(product) 
      y = file1.remove(product) 
+4

') (추가'와'및'y'은 '아무튼 x''에서()'복귀'None', 그래서 그 값을 저장을 제거 어떤 의미가 있습니다. –

+0

위대한 일을, 당신은 내 많은 실수에서 배울려고 오류를 일으키는 설명해 주시겠습니까 :) –

+0

[이 예제를 고려하십시오 (http://pastebin.com/TsKv1YwC) - 여기에 각 항목을 반복하는 동안 인쇄 된 다음 제거됩니다. 즉, 목록의 다음 항목이 속도가 빨라지고 인덱스 카운터가 증가함에 따라 다음 반복에서 건너 뜁니다 (예제의 목록에 남아있는 항목을 찾으려고 시도합니다 :)). 이것은 매우 불쾌하고 오류를 찾기 어렵게 만들 수 있으므로 최선의 방법은 아닙니다 (공식 python 튜토리얼 (http://docs.python.org/tutorial/controlflow.html#for- 진술) – mata

0

음수가 원인 일 수 있습니다. 건너 뛰려면 음수를 읽을 수 있습니다. 그걸 시험해 봤니?

2

당신은 당신이 현재 (이상 반복하고 객체를 조작되고 싶지 않아 인스턴스에서는 실제로 예외가 발생합니다.

또한 list.append adn list.remove이 제자리에 있으므로 항상 None을 반환하므로 아무 것도 결과를 지정하지 않습니다.

나는 그에게 뭔가를 할 거라고 다음

with open('test') as fin: 
    test = [] 
    other = [] 
    rows = (line.split() for line in fin) 
    for name, group, value in rows: 
     if group[:3] in ('fun', 'got'): 
      add = test.append 
     else: 
      add = other.append 
     add([name, group, value])