2015-12-09 8 views
1
print ([ 2 ∗ [ k ] for k in range (3) ] [ 2 ] [ 1 ]) 

это код, и он говорит, что ответ 2, кто-нибудь объяснит мне это. Я не понимаю, что именно запрашивает код, и я не знаю, как он получает 2 в качестве ответа. Я предполагаю, что он имеет какое-то отношение к итерации, но я не совсем понимаю его. У меня есть много трудностей со списками в целом, и это был вопрос, который был как на практике экзамен и реального экзамена и я хочу, чтобы понять, чтопояснить эту строку кода (списков)

+0

Времена подобны этому, когда кто-то желает старой «слишком локализованной» близкой причины. Действительно ли полезно иметь базу знаний, полную «объяснить, что это делает»? –

ответ

2

for k in range(3) установит k в 0, то 1, то 2. Итак, тогда 2*[k] сделает список с двумя элементами, где каждый элемент является текущим значением k. Результат после понимания списка эквивалентен [ [0,0], [1,1], [2,2] ][2][1] Так как [2] после понимания списка будет обращаться к 3-му элементу списка (список по индексу 2), а [1] получит доступ ко второму элементу подсписок, результатом будет 2

0  1  2  <-- first level indices 

[ [0,0], [1,1], [2,2] ] 
        ^--- this is the item you get 
    0 1 0 1 0 1 <-- second level indices 
0

Вы можете сломать единственное утверждение на 4, и это будет более естественно.

>>> range (3) 
[0, 1, 2] 
>>> [ 2 * [ k ] for k in [0, 1, 2] ] # where 2*[0] returns [0,0] and so on 
[[0, 0], [1, 1], [2, 2]] 
>>> [[0, 0], [1, 1], [2, 2]][2] 
[2, 2] 
>>> [2, 2][1] 
2 
Смежные вопросы