2010-06-30 1 views
1

안녕하세요. 파이썬으로 목록을 좀 더 효율적으로 만들려고 노력하지만, 원하는 것을 할 수 있는지, 알아낼만한 가치가 있더라도 알아낼 수없는 것 같습니다.목록의 항목을 두 개로 나누고 그 중 하나를 다른 목록에 추가하십시오.

스트림이 목록입니다.

10,123400FFFE001DB9AA

내가 그래서리스트 분할 각 하나를 통해 실행 쉼표 후 각 항목의 두 번째 부분에 도착하려고 노력하고 온도에 저장하고 : 목록의 각 항목은 같은 것입니다. 나는 그것들을 incoming_data라는 다른 목록에 temp [1]라고 덧붙인다.

내가 분할하고 임시로 저장하고, 한 줄에 incoming_data 목록에 같은 추가 라인 결합 싶습니다 :

incoming_data.append (item.split (''))

위의 구문이 완전히 잘못되었다는 것을 알고 있지만 그 점을 이해하기를 바랍니다. 여기에 현재 코드가 있습니다.

평소와 다른 비평을 환영합니다. 감사!

#init the final list 
incoming_data = list() 

#iterate over each item in the list 
for item in stream: 

     #clear the temp variable for next time 
     temp = '' 

     #we sometimes get blank items in the stream list so check first 
     if item <> '': 

      #split each item in the stream list using the comma as delimiter 
      temp = item.split(',') 

      #append to the final data lis 
      incoming_data.append(temp[1]) 

답변

6
incoming_data = [item.split(",")[1] for item in stream if item] 

if item 폐기 stream에 빈 줄.

+0

아, 빈 줄 잡기에 +1. –

1

당신이 사용할 수있는 파이썬의 편리한 - 멋쟁이 list comprehensions 한 줄에서이 작업을 수행합니다 :

incoming_data = [ item.split(',')[1] for item in stream ] 
+0

Ninja'ed! 그리고 @ RichardFearn의 답변은'if item'을 마지막에 포함시키는 것이 낫습니다! – ewall

+1

빈 줄을 조심하십시오 :-) (제 대답을보십시오.) –

1

사실, 당신이 incoming_data.append(item.split(',')[1])을 할 수 있습니다. 당신이 실제로 뭔가를 스트리밍하는 경우

incoming_data = [item.split(',')[0] for item in stream if item]

비록 : 당신은 정말 당신이 지능형리스트를 사용하여 하나의 라이너로 전체 오두막을 결합 할 수 있습니다 (내 이제 빈 줄에 대한 정정 리처드에게 감사를) 원하는 경우 generators(PDF)을 봐야합니다. 그들은 절대적으로 훌륭합니다.

관련 문제