所以我当前正在创建一个程序,要求我将调用函数格式化为类。我遇到的一个问题是我无法在多个列表的列表中返回某项的位置。我给你举个例子:
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”。
如何在列表中的列表中找到项目的位置? 任何帮助将不胜感激!谢谢。
答案 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()