2015-04-23 2 views
3

Я столкнулся с проблемой Python 3.4.3, и это нигде не упоминается.Список python (zipobject) возвращает пустой контейнер (список)

Позволяет сказать:
a = [1,2,3,4] и b = [5,6,7,8]

Объединяют эти вертикально: ab = zip(a,b) в Python 3, ab сами вернутся:

почтового объекта в (некоторых HexNumber)

Все хорошо здесь, в python 3, чтобы получить каскадный список:
aabb = list(ab)

Теперь Heres вопрос, первый раз, aabb действительно возвращает реальный список:
[(1, 5), (2, 6), (3, 7), (4, 8)]

второй раз и далее, однако, если вы снова сделать весь процесс list(aabb) просто вернет пустой контейнер [], как и list().

Он будет работать только после перезапуска оболочки/интерпретатора.

Это нормально или ошибка?

EDIT: Ok, ребята, я не понял, что это было связано с zip, он КАЗАЛОСЬ постоянным, как ab вернулся один и тот же гекс значение каждый раз, так что я думал, что это было связано с list(ab).

Во всяком случае, выработанные переназначение ab = zip(ab)

Из того, что я понимаю, в ответах и ​​оригинальные ссылки, ab получает УТИЛИЗИРОВАТЬСЯ когда-то читал.

+0

@vaultah Я не вижу нигде в этом разделе документов, что 'list (list (zip ([1,2,3,4], [5,6,7,8]))) = = [] '. возможно, вы можете объяснить? @DonD, это то, что вы говорите, что получаете? – dbliss

+2

Или http://stackoverflow.com/questions/3940072/exhausted-iterators-what-to-do-about-them – matsjoyce

+0

@vaultah, пожалуйста, уточните, он не говорит, почему он работает только один раз. и почему это было опущено в ближайшее время, когда я опубликовал его. – DonD

ответ

2

Эта проблема не будет создана list(aabb), но с list(ab) в вашем коде прямо сейчас:

a = [1, 2, 3, 4] 
b = [5, 6, 7, 8] 

ab = zip(a, b) 
aabb = list(ab) 

print(list(ab)) 

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

a = [1, 2, 3, 4] 
b = [5, 6, 7, 8] 

ab = zip(a, b) # generator expression created by the zip function 
aabb = list(ab) # element read from ab, disposed, placed in a list 

print(list(ab)) # now ab has nothing because it was disposed 

Это с другой стороны, должно работать, потому что aabb это просто список не расположен генератор ab:

a = [1, 2, 3, 4] 
b = [5, 6, 7, 8] 

ab = zip(a, b) 
aabb = list(ab) 

print(list(aabb)) 
+0

NMDV, но «интернализированные последующие вызовы» - очень странный способ выразить это. Я даже не уверен, что такое «интернализованный следующий звонок». – DSM

+0

Ответ на этот вопрос не имеет смысла (особенно потому, что его '__next__' в 3). Вы не упоминаете итератор, или как исправить проблему. – matsjoyce

+0

_I know_, но ваш ответ не делает это ясным, тем более, что OP опирается на python. – matsjoyce

Смежные вопросы