从列表/元组列表中获取值

时间:2019-03-20 08:07:47

标签: python list tuples

我试图基于列表中的第三个值获取列表中每个列表的第一个值-如果它是-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 个答案:

答案 0 :(得分:1)

尝试一下:

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 :(得分:1)

代码

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]

答案 2 :(得分:0)

[i[0] for i in given_list if i[2] == -3]

这可能对您有帮助

答案 3 :(得分:0)

您可以使用运算符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]