很抱歉打扰这个可能很愚蠢的问题,但我已经被困了(再一次)一段时间了。
我有列表清单
abc = [['date1','number1'],['date2','number2']...]
日期可能相同。例如:date1和date2可能都是' 02/02 / 2015',而date3可能是' 05/02 / 2015'。
在下面的例子中,我想获得第一次与日期匹配的元素的索引以及我提供函数的日期。例如,像
function(abc,'02/02/2015')
output: [0][0] (and only this, so not [1][0] as well)
OR
function(abc,'05/02/2015')
output: [2][0]
有人知道怎么做吗?谢谢!
答案 0 :(得分:0)
您可以使用以下功能实现:
def match_date(l, d):
return list(filter(lambda x: x[0] == d, l))[0]
,由于内置filter()
,它将匹配列表中每个元素作为第一个参数给出的函数,并返回一个列表,其中包含函数返回的所有值True
。因此,它将返回列表中匹配的所有日期的列表:
>>> def match_date(l, d):
... return list(filter(lambda x: x[0] == d, l))[0]
...
>>> abc = [['date1','number1'],['date2','number2']]
>>> match_date(abc, 'date2')
['date2', 'number2']
>>> abc = [['date1','number1'],['date2','number2'],['date2', 'number3'],['date3', 'number4']]
>>> match_date(abc, 'date2')
['date2', 'number2'], ['date2', 'number3']
从那里开始,你可以做到:
>>> abc.index(match_date(abc, 'date2')[0])
1
将为您提供匹配的第一个元组的索引。我不相信你需要第二个索引,因为你知道总是[0]
,因为它是你的数据模型。
使它成为一个功能:
>>> def get_index_of_match_date(l, d):
... return l.index(filter(lambda x: x[0] == d, l)[0])
...
>>> get_index_of_match_date(abc, 'date2')
0
>>> get_index_of_match_date(abc, 'date2')
1
>>> get_index_of_match_date(abc, 'date3')
3
答案 1 :(得分:0)
def firstMatch (date, lst):
for i, sublist in enumerate(lst):
if sublist[0] == date:
return i
基本上,如果第一个元素与您想要的日期匹配,您希望遍历列表并检查每个子列表。如果是这种情况,只需返回您当前所在的索引;否则继续迭代。
>>> abc = [['02/02/2015', '1'], ['02/02/2015', '2'], ['05/02/2015', '3']]
>>> firstMatch('02/02/2015', abc)
0
>>> firstMatch('05/02/2015', abc)
2