Итерировать элементы вложенного списка по определенному индексу вместе с индексом элемента другого нормального списка - PullRequest
1 голос
/ 03 августа 2020

У меня есть эти два списка:

date_list = ['01-01-2020', '01-02-2020', '01-03-2020', '01-04-2020']

values_list = [['00:00:00', '20', '1', '5000'],
 ['00:01:00', '23', '70', '6000', '00:02:00', '56', '48', '8000'], 
['00:03:00', '32', '90', '5800', '00:04:00', '666', '486', '9000'], 
['00:05:00', '776', '68', '950']]

Я хочу, чтобы дата добавлялась каждый раз к таким значениям, как это:

[['01-01-2020 00:00:00', '20', '1', '5000'], 
['01-02-2020 00:01:00', '23', '70', '6000', '01-02-2020 00:02:00', '56', '48', '8000'], 
['01-03-2020 00:03:00', '32', '90', '5800', '01-03-2020 00:04:00', '666', '486', '9000'], 
['01-04-2020 00:05:00', '776', '68', '950']]

У меня есть время для каждого 27-го индекса в моем список исходных значений. Я делаю это до сих пор, добавляя дату к каждому элементу вложенного списка, а затем использую pandas, чтобы очистить его после.

[ [date_list[i] + ' '+ j for j in sub] for i, sub in enumerate(values_list) ]

Любой оптимальный способ сделать это?

Ответы [ 3 ]

2 голосов
/ 03 августа 2020
ans = [[v if ':' not in v else dl+' '+v for v in vl] for dl,vl in zip(date_list, values_list)]

Код добавляет дату ко всем атрибутам, имеющим :, которые есть только у дат.

Вывод:

[['01-01-2020 00:00:00', '20', '1', '5000'],
 ['01-02-2020 00:01:00',
  '23',
  '70',
  '6000',
  '01-02-2020 00:02:00',
  '56',
  '48',
  '8000'],
 ['01-03-2020 00:03:00',
  '32',
  '90',
  '5800',
  '01-03-2020 00:04:00',
  '666',
  '486',
  '9000'],
 ['01-04-2020 00:05:00', '776', '68', '950']]
1 голос
/ 03 августа 2020

Я бы использовал al oop.

for date, values in zip(date_list, values_list):
    values[::4] = (date + ' ' + value for value in values[::4])
1 голос
/ 03 августа 2020

Я бы заархивировал оба данных вместе (не объединял их) и перестроил бы список, изменяя элемент, если он соответствует дате (каждый 4-й элемент), оставляя другие

result = [["{} {}".format(dl,x) if i%4==0 else x for i,x in enumerate(vl)]
           for dl,vl in zip(date_list,values_list)]

>>> result
[['01-01-2020 00:00:00', '20', '1', '5000'],
 ['01-02-2020 00:01:00',
  '23',
  '70',
  '6000',
  '01-02-2020 00:02:00',
  '56',
  '48',
  '8000'],
 ['01-03-2020 00:03:00',
  '32',
  '90',
  '5800',
  '01-03-2020 00:04:00',
  '666',
  '486',
  '9000'],
 ['01-04-2020 00:05:00', '776', '68', '950']]
...