2017-11-09 5 views
3

내가 중첩 된 목록과 문자 변수가 확인 :파이썬 - 중첩 된 목록 - efective

colors = [ 
     ("r", [255,0,0]), 
     ("g", [0,255,0]), 
     ("b", [0,0,255]), 
     ("y", [255,0,0]), 
     ("p", [255,0,255]) 
      ] 

char_to_check="b" 

I (가장 효율적인 방법)을 확인할 수 있습니다 방법 :
1. 중첩 된 목록에 존재 char_to_check 경우를 색 지수 (R, G, B, 등등) 및

2. 존재한다면 (char_to_check) 색 0,123,800,731 (255, 예)에서이 숯불에 대한 값을 제공 할

colors_dict = dict(colors) 

if char_to_check in colors_dict: 
    rgb_values = colors_dict[char_to_check] 
    # do something 
+0

키와 같은 문자를 가진'dict'를 사용하여 한 번만 (큰 목록에서) 색상 값을 찾을해야하는 경우, 다음 직접 루프는 dict가 건설보다 몇 배 더 효율적으로 될 것입니다 :) – voiDnyx

답변

5

그냥 해시 (또는 파이썬의 측면에서 사전)를 만들 가장 효율적인. @hspandher 솔루션은 사전을 한 번 작성하고 여러 번 쿼리하면 효율적일 수 있습니다.

for c, v in colors[::-1]: 
    if c == 'b': 
     print(v) # <- do something or return the value 
     break 
+0

spot-on 대답. OP가 자신의 데이터 구조가 간단히 dict로 변환 될 수 있다는 것을 모르기 때문에 실제로 중복되지는 않습니다. –

+0

@ Jean-FrançoisFabre 예. 다행히 그는 이미 인스턴스화를 위해 올바른 형식의 데이터를 가지고있었습니다. – hspandher

+0

감사합니다. 완벽하게 작동합니다. – user8913714

1

내가 사용에 따라 @hspandher 대답을 좋아하지만, 그 해결책이되지 않을 수도 있습니다 그렇지 않은 경우 오류 (모든 종류)

+0

dict를 만드는 것이 단지 1 회 이상 사용될 때만 효율적이라는 것을 설명하는 UV –