2016-08-04 1 views
2

То, что я пытаюсь сделать, это извлечь нулевой элемент в списке и первый элемент в другой список данного 2-мерного списка.Python: Может ли это быть сделано в заявлении о единственном списке?

baseball = [[180, 78.4], 
      [215, 102.7], 
      [210, 98.5], 
      [188, 75.2]] 

x = [ a[0] for a in baseball ] 
y = [ a[1] for a in baseball ] 
print x 
print y 

Можно ли это сделать в заявлении о едином списке?

ответ

2

Предполагая, что это прямоугольный (т.е. длина внутренних списков соответствует.), Вы можете осуществить следующие действия:

def transpose(matrix): 
    return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))] 

Тогда ваша проблема просто призыв к транспозиции (x, y = transpose(baseball)).

+0

спасибо отлично работает – Athar

2

Если вы не возражаете кортежи:

baseball = [[180, 78.4], 
      [215, 102.7], 
      [210, 98.5], 
      [188, 75.2]] 


x,y = zip(*baseball) 

Если вы действительно хотите списки:

x,y = map(list,zip(*baseball)) 

Если у вас более двух элементов в каждом, и хотел только некоторые элементы, такие как:

baseball = [[180, 1, 78.4], 
      [215, 2, 102.7], 
      [210, 3, 98.5], 
      [188, 4, 75.2]] 

from operator import itemgetter 

x, y = zip(*map(itemgetter(0, 2), baseball)) 

Это даст вам:

((180, 215, 210, 188), (78.4, 102.7, 98.5, 75.2)) 
+0

Стандартное предупреждение: 'zip (* baseball)' не будет делать транспонирование, если вы ищете, если 'бейсбол' пуст. – user2357112

+0

спасибо, отлично поработал, но искал решение, используя список-понимание – Athar