2016-10-18 3 views
-2

으로 변환하면 indexing을 허용하지 않는 인 track_ids을 처리하려고합니다.파이썬 - 집합을 아래 목록의 코드에서

track_name = sp.track(track_ids[i])['name'] 

는 어떻게 그래서 색인이 가능 해요 listtrack_ids을 변환합니까?

편집이 :

def filterBelowThreshold(product, filter_name, track_ids, values, 
    xsongs, threshold): 
    print product.upper(), 'PLAYLIST:' 
    for i, x in enumerate(values): 
     if x < threshold: 
      track_name = sp.track(track_ids[i])['name'] 
      #append minding foreign track names 
      xsongs.add(track_name.encode("utf-8")) 
      print product.upper(),'-', "{} = {}".format(track_name.encode("utf-8"), x), filter_name 
+2

당신은 당신이 할 수없는 for 루프와 그 위에 갈 수 있습니다 ? 또한 set을'list()'에 전달할 수도 있습니다. – Carcigenicate

+1

인덱스가없는 (순서가 지정되지 않은) 세트이기 때문에'values'의 색인'i'가 실제로 특정'track_id'를 참조하도록 보장 할 방법이 없습니다 – fstab

+0

다음은 track_ids와 값은 관련이 있습니다. 그렇다면 함수를 호출하여 순서가 엉망이되지 않도록하기 전에 값이 합쳐지면 좋습니다. (또는 목록에 필터를 적용하려는 경우) – Kim

답변

4

set o a list 함수를 호출하여 list(track_ids).

이 새 목록의 요소는 의미있는 순서가 없으므로 values의 요소가 있다고 생각한다고 가정하고 다른 목록에서 열거하는 i 색인을 사용하는 것처럼 액세스하면 올바르지 않습니다. track_ids은 다소 관련이 있습니다.

하지만, 당신이 정말로 얻으려면 values 당신이 더 간결한 방법으로 시도 할 수 있습니다 (가능성이 임의 페어링되는) 쌍 track_ids :

for val, track_id in zip(values,list(track_ids)): 
+0

주문은 여기에 필요하지 않습니다. 제가 노래 목록 (track_names)과 함께 해당 목록의 'track_ids'로 끝나면 –

+0

당신은 위의 코드에서 해결책을 찾으십시오. –

0

내가 그렇게 말할 것입니다 :이 완전한 기능입니다

[x for x in track_ids][index] 
+1

OP가 완전한 기능을 게시했습니다. 아마도 코드의 전체 버전에 제안을 적용해야할까요? – APC

+0

하지만 세트는 순서가 지정되지 않으므로 목록도 순서가 지정되지 않습니다. 또한 –

+1

또한'list' (track_ids)' – fstab

0

당신의 setlist와 함수 호출을 래핑, 루프에 갈 필요가 없습니다, 참조 예 :

#Index Doesn't work with set 
>>> set([1,2,3])[1] 
Traceback (most recent call last): 
    File "python", line 1, in <module> 
TypeError: 'set' object does not support indexing 

#convert set to list like this and indexing would work. 
>>> list(set([1,2,3]))[1] 
=> 2