检查列表Python

时间:2015-06-24 17:39:28

标签: python list if-statement for-loop

我有一个列表子列表,我想搜索并检查两个单独的元素是否在同一个子列表中。例如,以随机顺序列出16个列表元素:

list=[[], [9, 10], [1, 2, 8, 13], [0, 3, 6, 14], [5, 7, 11], [],]
#Max number of classes
MaxN=5
for k in range(0,MaxN):
    for i in list[k]:
      ##if (check whether i exists in same sublist as i+1):
          continue
        else
          foo()

所以[9,10],[1,2],[1,8],[1,13],[2,8],[2,13],[8,13]之间的联系,[ 0,3],[0,6],[0,14],[3,6],[3,14],[6,14],[5,7],[5,11],[7,将全部跳过,并且将在列表的其余部分执行操作foo。

我试过了:

for k in range(0,MaxN):
    for i in list[k]:
        if list[i]==list[i+1]:
           print 'skipped'
        else:
           print 'included'

但我得到一个列表索引超出范围错误,我似乎不明白。

2 个答案:

答案 0 :(得分:1)

试试这个:

>>> output=[]
>>> list=[[], [9, 10], [1, 2, 8, 13], [0, 3, 6, 14], [5, 7, 11], []]
>>> for l in list:
      for i in range(len(l)):
         for j in range(i+1,len(l)):
            output.append([l[i],l[j]])


>>> output
[[9, 10], [1, 2], [1, 8], [1, 13], [2, 8], [2, 13], [8, 13], [0, 3], [0, 6], [0, 14], [3, 6], [3, 14], [6, 14], [5, 7], [5, 11], [7, 11]]

获取输出列表后,您只需尝试使用“in”关键字:

>>> for k in range(5):     #or range(maxN)
      if (list[k] in output):
          print("skipped")
      else:
          print("included")    

included
skipped
included
included
included

答案 1 :(得分:0)

我不确定我明白你要做什么。我读了你的问题,你正试图查看一个列表,看看它的任何元素是否在任何后续列表中。如果是这样,你想要做类似以下的事情(注意我将你的变量更改为my_list,在python中调用list是危险的,因为你不能再使用它来制作实际列表)

my_lists=[[], [9, 10], [1, 2, 8, 13], [0, 3, 6, 14], [5, 7, 11], [],]
n_sub_lists = len(my_list)

for k in range(0,n_sub_lists):
    for i in my_lists[k]:
        for j in range(k, len(n_sub_lists)):
            if i in my_lists[j]:
                continue
            else:
                foo()

我还删除了您的MaxN变量,因为我不确定它的用途。如果我在那里弄错了,请发表评论,我会更新