Python &引用;列表索引必须是整数或切片,而不是list";尝试浏览由列表组成的列表时

Python &引用;列表索引必须是整数或切片,而不是list";尝试浏览由列表组成的列表时,python,python-3.x,list,Python,Python 3.x,List,给我 列表索引必须是整数或片,而不是列表 我不完全理解它是如何工作的,我可以做大量的fors来检查它是否是一个列表,如果不是,然后检查,但我相信有一个更简单的方法 有人知道我做错了什么吗?试试这个: t1 = [[[None,2,None],5,[None,5,None]],6,[None,7,[None,8,None]]] def recherche_iteratif(t,k): """ Même fonctionnement que recherch

给我

列表索引必须是整数或片,而不是列表
我不完全理解它是如何工作的,我可以做大量的fors来检查它是否是一个列表,如果不是,然后检查,但我相信有一个更简单的方法

有人知道我做错了什么吗?

试试这个:

t1 = [[[None,2,None],5,[None,5,None]],6,[None,7,[None,8,None]]]

def recherche_iteratif(t,k):
    """ Même fonctionnement que recherche_recur mais en itératif """
    if t == None:
        return t
    for i in t:
         if k in t[i]:
            return t[i]

问题在你的清单上

def recherche_iteratif(t,k):
    """ Même fonctionnement que recherche_recur mais en itératif """
    temp = t
    while True:
       if temp == None:
          return None
       if k == temp[1]:
          return temp
       elif k > temp[1]:
          temp = temp[2]
       else:
          temp = temp[0]
  • 第一个元素:[[None,2,None],5[None,5,None]]>是一个列表
  • 第二个元素:6是一个int
  • 第三个元素:[None,7,[None,8,None]]又是一个列表
您需要为元素类型添加一个检查,如

t = [[[None,2,None],5,[None,5,None]],6,[None,7,[None,8,None]]]
检查这是否有效

if type(t[i]) != list : check if none
else : for j in t[i] : check if j is none

由于列表的类型,您还需要在每个点执行检查。这是我额外加的东西。即使列表中存在字符串,这也可以工作。由于您需要进入内部列表,这应该可以正常工作。

与另一个相同,“if k in t[i]:TypeError:type'int'的参数不可iterable”,不确定why@Kirout你能解释一下你想做什么吗?我想找到子树(对不起,如果不是我不是母语人士的话),其中k是词根。例如,在t1中,如果我给2,我想要“[None,2,None]”,5“[None,2,None],5[None,5,None]]”,等等…@Kirout编辑了答案。这将打印预期的输出。您到底想做什么?我想找到子树?(抱歉,如果不是我不是母语人士),其中k是根。例如,在t1中,如果我给2我想要“[None,2,None]”,5“[[None,2,None],5[None,5,None]]”等等…哦,这很接近于工作,它不适用于2和8。出于某种原因,如果我找到了解决方案,我会尝试工作并编辑它!哦,是的,我刚才看到了,但那将是因为有一个内部列表。“in”关键字通常只是插入,所以它不会打开内部列表。我已经更新了我的答案,我相信它工作得很好。尝试一下,就像你需要使用递归一样
def recherche_iteratif_r(t,u):
  if t == None:
    return "t"
  if type(t) is list :
    if u in t :
      print(t)
    else :
      for i in t :
        recherche_iteratif_r(i,u)
def recherche_iteratif(t, k):
""" Même fonctionnement que recherche_recur mais en itératif """
if t is None:
    return t
for i in range(0, len(t)):  # here's what you need to correct
    if type(t[i]) == int:
        if k == t[i]:
            return t[i]
    elif type(t[i]) == list:
        if k in t[i]:
            return t[i]
        else:
            answer = recherche_iteratif(t[i], k)
            if answer:
                return answer
    else:
        if k is t[i]:
            return t[i]