对不起,如果有明显的问题,我是初学者而且我的google-fu失败了。
我正在编写一个搜索文本以进行头韵的工具。我有一个多维列表:[[e,a,c,h],[w,o,r,d],[l,o,o,k,s],[l,i,k,e] ,[t,h,i,s]]
我想要的是遍历主列表中的项目,检查每个项目的[0]索引,看它是否等于FOLLOWING项目的[0]索引。
def alit_finder(multi_level_list):
for i in multi_level_list:
if i[0] == multi_level_list[i + 1][0] and i != multi_level_list[-1]:
print i, multi_level_list[i + 1]
我得到一个TypeError:只能连接列表(而不是#34; int")才能列出。
所以[i + 1]不是指示索引等于索引加上一个'的项目的正确方法。但是,[+ 1]也不起作用:这似乎返回列表中任何两个单词,在单词[0]上具有相同的字母。
我如何参考以下项目'在这个声明中?
ETA:谢谢大家!我很感激你的时间和解释,我在这里做错了什么!
答案 0 :(得分:0)
在正常的for-each循环中,您一次只能访问一个元素:
for x in lst:
print("I can only see", x)
所以你需要迭代索引,例如:
for i in range(len(lst) - 1):
print("current =", lst[i], "next =", lst[i+1])
顺便说一句,作为惯例,使用名为i
的变量来始终引用循环索引是个好主意。在您的原始代码中,部分原因是您首先尝试使用i
作为列表元素,然后将其作为索引使用,它可以& #39;两个都是!
答案 1 :(得分:0)
我想你想要这样的东西:
def alit_finder(multi_level_list):
l=len(multi_level_list)
for i in xrange(l-1):
if multi_level_list[i][0] == multi_level_list[i + 1][0]:
print multi_level_list[i], multi_level_list[i + 1]
li=[['e','a','c','h'], ['w','o','r','d'], ['l','o','o','k','s'], ['l','i','k','e'], ['t','h','i','s']]
alit_finder(li)
结果:
['l', 'o', 'o', 'k', 's'] ['l', 'i', 'k', 'e']
答案 2 :(得分:0)
您可以使用i作为索引,使用x作为枚举列表的元素:
def alit_finder(multi_level_list):
for i, x in enumerate(multi_level_list):
if i == len(multi_level_list) - 1:
break # prevent index out of range error
if x[0] == multi_level_list[i + 1][0] and x != multi_level_list[-1]:
return x, multi_level_list[i + 1]
word_list = [['e','a','c','h'], ['w','o','r','d'], ['l','o','o','k','s'],
['l','i','k','e'], ['t','h','i','s']]
print alit_finder(word_list)
# (['l', 'o', 'o', 'k', 's'], ['l', 'i', 'k', 'e'])
答案 3 :(得分:0)
这样的事情会起作用:
matching_indices = [i for i, (w1, w2) in enumerate(zip(multi_level_list, multi_level_list[1:])) if w1[0] == w2[0]]