2016-12-13 7 views
1

Я изо всех сил пытаюсь получить zip функцию Python 2.7, чтобы работать, чтобы обеспечить вывод, который мне нужен.Python ZIP Функция дает неожиданный результат

Пример данных, которые у меня есть:

print(score_data[0:3]) 
[['0/1:7,3:10:99', '0/0:3:3:99'], ['0/0:12:12:99', '0/1:11,7:18:99'], ['0/1:8,7:15:99', '0/1:14,4:18:99']] 

Тип выхода, который я хочу

[['0/1:7,3:10:99','0/1:8,7:15:99', '0/0:12:12:99'], [ '0/1:11,7:18:99','0/0:3:3:99', '0/1:14,4:18:99']] 

Выходной сигнал, который я получаю:

print(zip(score_data[0:3])) 
[(['0/1:7,3:10:99', '0/0:3:3:99'],), (['0/0:12:12:99', '0/1:11,7:18:99'],), (['0/1:8,7:15:99', '0/1:14,4:18:99'],)] 
+0

'печати (* score_data [0: 3])' wlll даст вам ожидаемый результат, но в другом порядке. – JRodDynamite

ответ

6

Вы ошибочно применяя zip в одном списке. zip не жалуется, но это только добавляет измерение один кортежа в список, не много пользы:

>>> list (zip([1,2,3,4])) 
[(1,), (2,), (3,), (4,)] 

Вам нужно расширить подсписки как позиционные аргументы (с помощью * оператора), чтобы перейти к zip:

z = [['0/1:7,3:10:99', '0/0:3:3:99'], ['0/0:12:12:99', '0/1:11,7:18:99'], ['0/1:8,7:15:99', '0/1:14,4:18:99']] 

print(list(zip(*z))) # convert to list for python 3 compat. 

результат:

[('0/1:7,3:10:99', '0/0:12:12:99', '0/1:8,7:15:99'), ('0/0:3:3:99', '0/1:11,7:18:99', '0/1:14,4:18:99')] 

Обратите внимание, что zip выдает кортежи по умолчанию. Для создания list типов вместо:

print([list(x) for x in zip(*z)]) 

результат:

[['0/1:7,3:10:99', '0/0:12:12:99', '0/1:8,7:15:99'], ['0/0:3:3:99', '0/1:11,7:18:99', '0/1:14,4:18:99']] 
+0

Спасибо! :-) Я могу согласиться, что вы ответите через 11 минут. –

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