2011-01-01 5 views
0

목록 목록이 있다고 해봅시다. 크기 세 가지 요소의 내부 목록을 말하고 다음과 같습니다2D 목록에서 파이썬 조건부 목록 만들기

외부 목록 내가 외부 목록을 반복하고 임시 목록에 대한 데이터를 추려하려면이

data = [['apple', 'fruit', 1.23], 
     ['pear', 'fruit', 2.34], 
     ['lettuce', 'vegetable', 3.45]] 

과 같은

['apple', 'fruit', 1.23] 

만 요소 1이 일부 키워드 (일명 '과일')와 일치하는 경우 나는 과일을 일치하고있어 경우에 따라서, 나는이로 끝날 것 :

tempList = [] 
for i in data: 
    if i[1] == 'fruit': 
     tempList.append(i[0], i[2]) 

적은에서이 작업을 수행하는 몇 가지 '파이썬'방법이있다 :

tempList = [('apple', 1.23), ('pear', 2.34)] 

이 이러한 목표를 달성하기위한 하나의 방법입니다 윤곽?

답변

3

목록 함축, 당신은 목록 그냥 순서가 필요하지 않은 경우 튜플 인덱싱을 사용하거나 또한

tempList = [(i[0], i[2]) for i in data if i[1] == 'fruit'] 
tempList = [i[:1]+i[2:] for i in data if i[1] == 'fruit'] 

슬라이스, 발전기 식입니다. (여기 튜플 풀기에)

>>> tempListGen = ((a,c) for a,b,c in data if b == 'fruit') 
>>> tempListGen 
<generator object <genexpr> at 0x0266FD50> 
>>> print sorted(tempListGen) 
[('apple', 1.23), ('pear', 2.34)] 

+0

이 (간결성) 내 질문에 명시되지 않았더라도, 내 내부 목록이 상당히 길어서 전체 압축 풀기 대신 indicees (i [x])를 사용하면 아무 것도 제거하지 않는 – dls

+0

이 유용합니다 ... – 6502

+0

@dls : i [: 1] + i [2 :] 하나의 요소를 제거하는 사본. (올바른 구문으로 이제 감사합니다, 6502!) – Macke

5
[(i, k) for i, j, k in data if j == 'fruit'] 
+0

압축을 풀면 좋습니다. :) – Macke

1

리스트 이해 (파이썬 2.7에서 테스트)!

tempList = [(i[0], i[2]) for i in data if i[1] == 'fruit'] 

적은 수의 줄에서 동일한 결과를 얻고 더 빠르게 실행됩니다.

0
[[x[0], x[2]] for x in data if x[1] == 'fruit'] 
3

튜플 할당은 소형을위한 지능형리스트와 결합, 코드를 이해하기 쉽게 만들 수 있습니다 :

tempList = [(item, price) for item, kind, price in data if kind == 'fruit']