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