2016-10-01 3 views
0

목록의 목록이 있습니다. 각각의 중첩 된리스트는 n+1 요소를 가지며, 첫 번째 요소는 float이고 마지막 요소는 정수입니다. 각 중첩 목록에 대해 모든 수레 (n+1의 n 개 요소)를 가져와야합니다. 이를 달성하는 가장 좋은 방법은 무엇입니까? 예를 들어목록의 목록에서 각 목록의 마지막 항목을 제외한 모든 항목을 가져 오는 방법은 무엇입니까?

: 당신이 경우

x = [[0.1, 0.2, 1], [0.4, 0.05, 16], [0.3, 0.3, 5]] 
output = [[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]] 

답변

2

특정int 항상 마지막에 될 것입니다, 슬라이스 당신이 sub[:-1]x의 모든 하위 목록 sub에서 마지막 요소를 트리밍함으로써 옵션입니다 ([:-1] 마지막 요소를 제외하고 모두 잡아라는 뜻입니다.) :

out = [sub[:-1] for sub in x] # or sub[:2] if sub is always 3 elements long 
print(out) 
[[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]] 

다른 방법으로는 throu 그것은 float의 인스턴스 인 경우, 각각의 서브 - 소자를 통해 반복하고, 평가 x의 요소 GH 예 :

out = [[i for i in sub if isinstance(i, float)] for sub in x] 

이것은 어떤 요소 외설 x에서 하위 목록은 목록 sub 걸러 float 유형의 인스턴스입니다. 이것은 int의 위치가 항상 마지막에없는 경우 위치의 선명하게 촬상 그래서 당신이 그것을 사용할 수 있습니다 작동합니다

print(out) 
[[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]] 

마지막으로 루핑, 현재 위치에서 접근, forpop ING는 실행 가능 옵션 :

print(x) 
[[0.1, 0.2], [0.4, 0.05], [0.3, 0.3]] 
: 이제 x

for s in x: _ = s.pop() 

은에 돌연변이

output = [l[:-1] for l in x] 

그것은이 list comprehension라고 :은

+0

누군가이 대답이 유용하지 않다고 생각하면 편집하고 수정하는 것보다 더 기꺼이 생각할 것입니다. :-) –

4

이 짧고 쉬운 방법입니다.

관련 문제