列表的非特定索引 - python

时间:2014-11-06 01:39:29

标签: python list indexing

不确定如何描述我想要传达的内容。

我想通过仅搜索其中的一部分来获取列表中元素的索引。

喜欢说" -T4"在列表中的某个位置"列表"我希望只能通过搜索" -T"

来获取它的索引

这样的事情,但这不起作用:

indexx = list.index("-T")

即使列表中的实际元素是" -T4"

4 个答案:

答案 0 :(得分:1)

您所引用的一般概念是列表项的子字符串搜索

您需要遍历列表并比较每个项目(您可以使用正则表达式或字符串方法,具体取决于您希望它的灵活程度)来检查该位置中的项目是否包含所需项目串。

如果您使用enumerate迭代列表,那么您将获得索引,一旦找到它就可以返回(如果找不到则返回-1)。

实现它的一种可能方式:

#!/usr/bin/env python

o1 = ['A3', 'B3', 'C1', 'T2']
o2 = ['A3', 'B3', 'C1']

def partialSearch(obj, key):
    for idx, item in enumerate(obj):
        if key in item:
            return idx

    return -1


print "found: {0}".format(partialSearch(o1, 'T'))
print "found: {0}".format(partialSearch(o2, 'T'))

返回:

found: 3
found: -1

根据OP的评论进行编辑:

它返回一个整数,即找到密钥的索引(如果找不到,则为-1,技术上可以使用索引,但在这种情况下不应该使用)。这可用于将项目从列表中取出,即

loc = partialSearch(o1, 'T')
print "value at idx {0}: {1}".format(loc, o1[loc])

返回:

value at idx 3: T2

你也可以从函数中返回一个元组,比如(idx, item)

答案 1 :(得分:1)

以下内容如何:     matches = [i for m in mylist if i中的“-T”]

这会遍历mylist for i in mylist的每个项目(稍微调用每个项目)和if "-T" in i,然后将项目添加到包含i的新列表中(第一个) i)。

答案 2 :(得分:1)

通过re模块,

>>> l = ['-T4', 'B2', 'C6']
>>> l.index([ x for x in l if re.match(r'.*-T', x)][0])
0

答案 3 :(得分:0)

[i for i, x in enumerate(mylist) if "-T" in x]

这将返回与查询匹配的所有索引的列表。