不确定如何描述我想要传达的内容。
我想通过仅搜索其中的一部分来获取列表中元素的索引。
喜欢说" -T4"在列表中的某个位置"列表"我希望只能通过搜索" -T"
来获取它的索引这样的事情,但这不起作用:
indexx = list.index("-T")
即使列表中的实际元素是" -T4"
答案 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]
这将返回与查询匹配的所有索引的列表。