Список вопросов в Python - PullRequest
2 голосов
/ 26 июля 2011

Хорошо, у меня есть список из 296 точек данных и четырех пробелов. Я не могу редактировать этот список точек данных. у меня есть еще один список из 300 точек данных. Я хочу умножить списки вместе, пропуская Python, умножая точки данных, когда появляется свободное место Вот как выглядят списки:

a = [[6], [7], [], [7]]
b = [[100], [200], [300], [400]]

Какого рода обработку исключений мне придется добавить? Мой текущий код использует

for items in mathList:
  try:
      sumlist = [x * y for x,y in zip(grearp, rex)]
  except:
      print 'No data for',items

Ответы [ 2 ]

5 голосов
/ 26 июля 2011

Действительно ли длина обоих списков равна 300, с нулями или пустыми строками для отсутствующих точек данных? Если это так, это должно быть близко:

newList = [x[0] * y[0] if x else None for x, y in zip(l1, l2)]

- отредактировано -

Я понял, что я не рассмотрел данные образца так хорошо, как мог бы. Поскольку внутренний список пуст, он сам по себе не пройдёт проверку на истинность, поэтому просто if x. Также добавлена ​​индексация для внутренних списков по x, y.

0 голосов
/ 26 июля 2011

Подумайте, что вы также можете использовать что-то подобное (приведенный ниже код подготовит списки одинакового размера, а затем вычислит '*', если оба значения присутствуют - в противном случае будет включено единственное существующее значение):

from itertools import izip_longest

a = [[6], [7], [], [7]]
b = [[100], [200], [300], [400]]

newList = [[x[0] * y[0]] if x and y else (x or y) for x,y in izip_longest(a,b, fillvalue=[])]
...