我能够检测到匹配但无法找到它们的位置。
给出以下列表:
['A second goldfish is nice and all', 3456, 'test nice']
我需要搜索匹配(即“nice”)并打印包含它的所有列表元素。理想情况下,如果要搜索的关键字“很好”,结果应为:
'A second goldfish is nice and all'
'test nice'
我有:
list = data_array
string = str(raw_input("Search keyword: "))
print string
if any(string in s for s in list):
print "Yes"
所以它找到匹配并打印两者,关键字和“是”但它并没有告诉我它在哪里。
我是否应该遍历列表中的每个索引,并且每次迭代搜索“s in string”或者有更简单的方法来执行此操作?
答案 0 :(得分:3)
matches = [s for s in my_list if my_string in str(s)]
或
matches = filter(lambda s: my_string in str(s), my_list)
请注意,'nice' in 3456
会引发TypeError
,这就是我在列表元素上使用str()
的原因。这是否合适取决于您是否要考虑'45'
是否在3456
。
答案 1 :(得分:2)
试试这个:
list = data_array
string = str(raw_input("Search keyword: "))
print string
for s in list:
if string in str(s):
print 'Yes'
print list.index(s)
编辑工作实例。如果您只想要第一个匹配的索引,那么在if语句求值为true之后也可以中断
答案 2 :(得分:1)
print filter(lambda s: k in str(s), l)
答案 3 :(得分:1)
要打印所有包含漂亮的元素
mylist = ['nice1', 'def456', 'ghi789', 'nice2', 'nice3']
sub = 'nice'
print("\n".join([e for e in mylist if sub in e]))
>>> nice1
nice2
nice3
获取包含nice的元素的索引(与字母大小写无关)
mylist = ['nice1', 'def456', 'ghi789', 'Nice2', 'NicE3']
sub = 'nice'
index_list = []
i = 0
for e in mylist:
if sub in e.lower():
index_list.append(i)
i +=1
print(index_list)
>>> [0, 3, 4]