Получить значения из списка списка / кортежа - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь получить первое значение каждого списка списка на основе 3-го значения в списке - если это -3, то принять первое значение этого списка.

Первоначальный списоксписок выглядит так:

 [['GRRSCLOE1', <DstTzInfo 'America/Santiago' LMT-1 day, 19:17:00 STD>, -3.0, 'RR'], ['GRTFRAIX1', <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>, 1.0, 'P'], ['GRAMDZGP1', <DstTzInfo 'America/Argentina/Mendoza' LMT-1 day, 19:25:00 STD>, -3.0, 'P+PE'], ['GRASAOTB2', <DstTzInfo 'America/Sao_Paulo' LMT-1 day, 20:54:00 STD>, -3.0, 'PE'], ['GRTVAPEM4', <DstTzInfo 'America/Santiago' LMT-1 day, 19:17:00 STD>, -3.0, 'P']

Это желаемый результат:

['GRRSCLOE1','GRAMDZGP1','GRASAOTB2','GRTVAPEM4']

Ответы [ 4 ]

1 голос
/ 20 марта 2019

Попробуйте это:

l = [['GRRSCLOE1', <DstTzInfo 'America/Santiago' LMT-1 day, 19:17:00 STD>, -3.0, 'RR'], ['GRTFRAIX1', <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>, 1.0, 'P'], ['GRAMDZGP1', <DstTzInfo 'America/Argentina/Mendoza' LMT-1 day, 19:25:00 STD>, -3.0, 'P+PE'], ['GRASAOTB2', <DstTzInfo 'America/Sao_Paulo' LMT-1 day, 20:54:00 STD>, -3.0, 'PE'], ['GRTVAPEM4', <DstTzInfo 'America/Santiago' LMT-1 day, 19:17:00 STD>, -3.0, 'P']]
new_list = [i[0] for i in l if int(i[2])==-3]
1 голос
/ 20 марта 2019

Код

l = [['GRRSCLOE1', "<DstTzInfo 'America/Santiago' LMT-1 day, 19:17:00 STD>", -3.0, 'RR'], ['GRTFRAIX1', "<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>", 1.0, 'P'], ['GRAMDZGP1', "<DstTzInfo 'America/Argentina/Mendoza' LMT-1 day, 19:25:00 STD>", -3.0, 'P+PE'], ['GRASAOTB2', "<DstTzInfo 'America/Sao_Paulo' LMT-1 day, 20:54:00 STD>", -3.0, 'PE'], ['GRTVAPEM4',"<DstTzInfo 'America/Santiago' LMT-1 day, 19:17:00 STD>", -3.0, 'P']]
print([a[0] for a in l if float(a[2])==-3.0])

выход

['GRRSCLOE1', 'GRAMDZGP1', 'GRASAOTB2', 'GRTVAPEM4']

Пояснения:

Прежде всего ваши начальные строки списка должны быть заключены в двойные или простые кавычки, если у вас есть одинарные кавычки в строке и вы не хотите их избегать, используйте двойные кавычки.

Тогда вы ищете списки:

  • Конструкция [ <operation on a> for a in list if <condition on a>] позволит вам вернуть список, содержащий все элементы x вашего исходного списка, которые удовлетворяют условию
  • Это вернет все вложенные списки вашего примера, так как вас интересует только первый элемент, замените <operation on a> на a[0]
0 голосов
/ 20 марта 2019

Вы можете использовать оператор itemgetter() для получения элементов из подсписков:

from operator import itemgetter

iget = itemgetter(0, 2)

gen = (iget(subl) for subl in lst)
[i for i, j in gen if j == -3]
0 голосов
/ 20 марта 2019
[i[0] for i in given_list if i[2] == -3]

Это может помочь вам

...