2016-05-13 8 views
0

Так что я знаю, что, чтобы получить один столбец, я должен был бы написатьКак получить вторую половину списка списков в виде списка списков?

a = list(zip(*f)[0]) 

и результирующая а будет список, содержащий первый элемент в списках в ф.

Как это сделать, чтобы получить более одного элемента в списке? Я попытался

a = list(zip(*f)[1:19]) 

Но только что вернулся список списков, где внутренний список является состоящим из го элемента в каждом списке.

ответ

5

Простой способ не использовать zip(). Вместо этого используйте list comprehension:

a = [sub[1:19] for sub in f] 

Если это на самом деле вторая половина, что вы ищете:

a = [sub[len(sub) // 2:] for sub in f] 

Это будет включать в себя 3 в [1, 2, 3, 4, 5]. Если вы не хотите включать его:

a = [sub[(len(sub) + 1) // 2:] for sub in f] 
0

Вы должны обязательно выбрать решение @ zondo для производительности и удобочитаемости. Тем не менее, решение, основанное zip возможно и будет выглядеть следующим образом (в Python 2):

zip(*zip(*f)[1:19]) 

Вы не должны рассмотреть этот цикл распаковки, проносясь, нарезка, распаковка и повторно сжать в любом серьезном коде, хотя;)

В Python 3 вам нужно будет отобрать как zip результатов, так и list, что делает его еще менее сексуальным.

+0

@zondo Действительный пункт, тоже! Добавлена ​​определенная квалификация. – schwobaseggl