迭代多维列表?

时间:2016-07-01 14:59:29

标签: python list indexing

对不起,如果有明显的问题,我是初学者而且我的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:谢谢大家!我很感激你的时间和解释,我在这里做错了什么!

4 个答案:

答案 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]]