访问列表中的重复元素并在其旁边打印元素

时间:2015-07-17 04:53:11

标签: python list find-occurrences

我有这个函数,它有3个参数。 1)包含字符串的列表,2)search_term和3)place(可选参数)。

代码:

def ls_src(list,search_term,place=1):
    if search_term in list:
        a = list[list.index(search_term)+1]+':' + '\tThe second element of of search term is ' + (search_term[place])
        return a

现在我想访问search_term旁边的元素,但是如果元素在列表中重复,它还应该考虑该元素的其他匹配项,而不是仅考虑元素的第一次出现。

如果list_search(['a','b','c','a','e'],'a') 然后,该功能应该返回' b'并且' e'两者都是,因为它们是' a'旁边的元素。

所以我的问题是,我们如何访问' a'的其他事件,而不仅仅是第一次出现。

4 个答案:

答案 0 :(得分:4)

您需要使用enumerate函数来帮助获取元素及其索引。

def list_search(l, s):
    for i,j in enumerate(l):
        if j == s:
            print(l[i+1])

list_search(['a','b','c','a','e'],'a')  

<强>输出:

b
e

最后可能存在搜索元素,因此将print语句放在try except块中。

def list_search(l, s):
    for i,j in enumerate(l):
        if j == s:
            try:
                print(l[i+1])
            except IndexError:
                pass    

list_search(['a','b','c','a','e', 'a'],'a') 

答案 1 :(得分:1)

如果您更喜欢更具描述性的代码,可以采用这样的方法。它的时间稍长,但你避免使用一个字符变量。

这提供的另一个方面是如果查询字符串跟随自身,则不会返回它。可以通过删除最后一次if测试来更改。

def search_terms(terms, query):
    found = []
    count = len(terms)
    for index, term in enumerate(terms):
        next_index = index + 1
        if term == query and next_index < count and terms[next_index] != query:
            found.append(terms[next_index])
    return found

print search_terms(['a', 'a', 'b', 'c', 'a', 'e', 'a'], 'a')
# ['b', 'e']

答案 2 :(得分:0)

您可以使用迭代器和next()函数构建新列表。

def list_search(input_list, search_term, place=1):
    terms = iter(input_list)
    new_list = []
    try:
        [new_list.append(terms.next()) for term in terms if term == search_term[place-1]]
    except StopIteration:
        pass
    return new_list


tests = [
    (['a','b','c','a','e'], 'a', 1),
    (['a','b','c','a','e'], 'b', 1),
    (['a','b','c','a','e'], 'ab', 2),
    (['a','b','c','a','e'], 'e', 1),
    (['a','a','a'], 'b', 1),
    (['a','a','a'], 'a', 1)]

for input_list, search_term, place in tests:
    print list_search(input_list, search_term, place)

这些测试将为您提供以下结果:

['b', 'e']
['c']
['c']
[]
[]
['a']

答案 3 :(得分:0)

<强>代码:

def search(l,term):

    for num in range(len(l)):

        if l[num]==term:

            print (l[num+1])

搜索([&#39;蟒&#39;&#39; HTML&#39;&#39;蟒&#39;&#39; C ++&#39;&#39;蟒& #39;,&#39; java&#39;],&#39; python&#39;)

<强>输出:

html

c++

java