2014-11-13 5 views
-1

У меня есть проблемы со списком, я думаю, что я уже знаю, как использовать его хорошо, но, конечно же, я этого не делаю. Так вот мой код:Понимание списка

vector1=[x for x in range(0,351,10)] 
first=list(range(0,91)) 
second=list(range(100,181)) 
third=list(range(190,271)) 
fourth=list(range(280,351)) 
Quadrants=first+second+third+fourth 
string=['First']*91+['Second']*81+['Third']*81+['Fourth']*71 

vector2=dict(zip(Quadrants,string)) 
Quadrant=[] 

for n in range (len(vector1)): 

    Quadrant+=[vector2[vector1[n])]] 

Так я хочу сделать for_loop со списком понимания, но я не могу ... Я попытался это:

Quadrant=[y3 for y3 in [vector2[vector1[i]]] for i in range (len(vector1))] 
+0

Вы не хотите использовать '361' в своих' range() 'вызовах вместо' 351'? Есть 360 градусов по кругу ... – MattDMo

+0

@MattDMo, но тогда вы получите 37 10-градусных ломтиков. OP правильно (360 градусов IS 0 градусов, начало диапазона) –

+0

@ user3424423 Где? Думаю, нет. –

ответ

1

Вот код, вы пытаясь преобразовать в listcomp:

Quadrant=[]  
for n in range (len(vector1)): 
    Quadrant+=[y[vector1[n]]] 

Первое, вы должны преобразовать его в форму, используя append. Там действительно нет никаких причин, чтобы построить список, состоящие из 1-элемента из y[vector1[n]] в первую очередь, так что просто лома, что и у нас есть что-то, что может append непосредственно:

Quadrant=[] 
for n in range(len(vector1)): 
    Quadrant.append(y[vector1[n]]) 

И теперь у нас есть то, что мы можем преобразовать непосредственно в Пояснение к списку:

Quadrant = [y[vector1[n]] for n in range(len(vector1))] 

Это все, что нужно.

Тем не менее, я не уверен, почему вы делаете for n in range(len(vector1)) в первую очередь, если только вам нужно n для vector1[n]. Просто перебираем vector1 непосредственно:

Quadrant=[] 
for value in vector1: 
    Quadrant.append(y[value]) 

Который, опять-таки, может быть превращена непосредственно:

Quadrant = [y[value] for value in vector1] 

Однако все это предполагает, что исходный явный цикл является правильным, в первую очередь, что, очевидно, что нет. Ваш vector1 является dict, а не список. Зацикливаясь на нем, ключи от 0 до len(vector1) собираются поднять KeyError по всему месту. Изменение его на цикл непосредственно над vector1 решит эту проблему, но это означает, что вы перебираете ключи. Итак ... Я понятия не имею, что на самом деле пытался сделать ваш код, но сначала получим простое, но вербальную версию, и вы можете, возможно, преобразовать ее в понимание так же легко, как и выше.

+0

Well 'vector1' - это список,' vector2'is a _dict_ –

+0

@ThenewbieOne: вы отредактировали свой код после моего ответа, переименовав 'vector1' в' vector2' и 'y' в' vector1' или что-то в этом роде. Я не уверен, почему вы это сделали, но, вероятно, вы можете применить такое же переименование к моему коду. – abarnert

+0

@well на самом деле 'y == vector2', но копирование кода обратно сюда я пропустил. Извините за это –