如何使用.index在列表中的列表中搜索项目的位置?

时间:2018-10-03 03:07:09

标签: python python-3.x

所以我当前正在创建一个程序,要求我将调用函数格式化为类。我遇到的一个问题是我无法在多个列表的列表中返回某项的位置。我给你举个例子:

class Global():
    str_input = ""
    str_input_prv_word = ""
    str_input_nxt_word = ""

    prv_word = ""
    cur_word = ""
    nxt_word = ""

class Dog():
    wolf = [['fat', 'small'],[1, 3]]

input = "That's a small wolf"

def lis_str():
    ##### SPLIT INPUT STRING INTO DUPLICATE LISTS #####
    Global.str_input = input.split()
    Global.str_input_prv_word = input.split()
    Global.str_input_nxt_word = input.split()
lis_str()

def ya_done():
    ##### WHY CAN'T I FIND THE POSITION? :( #####
    print(Global.prv_word)
    print(Global.cur_word)
    print(Global.nxt_word)
    ##### PRINT POSITION OF ADJECTIVE DESCRIBING DOG IN DOG LIST #####
    exec(f"""if Global.prv_word in Dog.{Global.cur_word}:
    print(Dog.{Global.cur_word}.index('{Global.prv_word}'))""")


def create_words():
    ##### CREATE NEXT WORD FOR GLOBAL CLASS #####
    if len(Global.str_input_nxt_word) != 0:
        if len(Global.nxt_word) == 0:
            Global.nxt_word = Global.str_input_nxt_word.pop(1)
        if len(Global.nxt_word) != 0:
            Global.nxt_word = Global.str_input_nxt_word.pop(0)
    if len(Global.str_input_nxt_word) == 0:
        None
    ##### CREATE CURRENT WORD AND PREVIOUS WORD FOR GLOBAL CLASS #####
    if len(Global.str_input) != 0:
        if len(Global.cur_word) != 0:
            Global.prv_word = Global.str_input_prv_word.pop(0)
        Global.cur_word = Global.str_input.pop(0)
    if len(Global.str_input) != 0:
        create_words()
    ##### CREATE THE FINAL PREVIOUS WORD #####
    else:
        ya_done()

create_words()

现在这只是一个例子,我很快就写了,但是我仍然面临着完全相同的问题。现在,如果我删除“狗”列表中的第二个列表,即[1,3]

示例:

class Dog():
    wolf = ['fat', 'small']

它运行良好,并返回单词“ small”的值“ 1”。

如何在列表中的列表中找到项目的位置? 任何帮助将不胜感激!谢谢。

4 个答案:

答案 0 :(得分:0)

>>> biglist = [['a', 'b', 'c'], [1, 2, 3]]
>>> print biglist[0]
['a', 'b', 'c']
>>> print biglist[1]
[1, 2, 3]
>>> print biglist[0].index('b')
1

答案 1 :(得分:0)

这里遇到的问题是列表的实际元素是列表本身。如果您要查找整个列表,则会找到他们的位置:

In [13]: a = [[1, 2, 3], ['fat', 'small']]

In [14]: a.index(['fat', 'small'])
Out[14]: 1

In [15]: a.index([1, 2, 3])
Out[15]: 0

如果您真正想要的是浏览每个子列表,则必须在每个子列表上使用.index。您可以通过for循环或理解来做到这一点:

In [16]: [l.index('small') for l in a if 'small' in l]
Out[16]: [1]

这将返回目标单词所有出现的列表。如果您知道它只显示一次,则可以将其从结果列表中获取一个数字:

In [17]: [l.index('small') for l in a if 'small' in l][0]
Out[17]: 1

答案 2 :(得分:0)

您可以使用以下两种解决方案。

第一个解决方案将收集单词所在的每一行位置以及单词所在的位置。

wolf = [['fat', 'small'],[1, 3]]

def get_positions(lists, word):
    i = 0
    for list in lists:
        if word in list:
            index = list.index(word)
            print "List Position: " + str(i) + "\nWord Postion: " + str(index) + "\n"
        i += 1

get_positions(wolf, "small")

输出:

List Position: 0
Word Postion: 1

这是一个带有多个带有该单词的行的示例。

example2 = [['fat', 'small'],[1, 'fat']]

get_positions(example2, "fat")

输出

List Position: 0
Word Postion: 0

List Position: 1
Word Postion: 1

第二种解决方案,您必须提供数组,嵌套的数组位置和单词,它会返回此嵌套数组的索引位置:

wolf = [['fat', 'small'],[1, 3]]

def get_positions(lists, list_index, word):
    result = False
    if word in lists[list_index]:
        result = lists[list_index].index(word)
    return result

print get_positions(wolf, 0, "small")

输出:

1

答案 3 :(得分:0)

我提出的问题的答案(很快变得很明显)是我需要指定要在其中查找单词的列表。通过在列表索引查询中添加[0],我指定了哪个列表我想编制索引,因此能够提取预期的结果。在这种情况下,它是“ 1”(单词“ small”在第一个列表的第二个位置,对于那些不知道...的列表总是以0索引开头,所以0是第一个位置, “ 1”是第二个位置。换句话说,我在第一列表中搜索了一个单词,当它在第二个位置找到该单词时返回“ 1”。接下来的问题!

format()