如何在列表中查找数字序列

时间:2015-06-23 02:29:23

标签: python list

我试图找出一些数字序列是否在列表中。如果是这样,则应从列表中删除此元组。数字必须相互连接。

示例:

元组列表:

list_1 =  [(), (1,), (3,), (2,), (4,), (1, 3), (1, 2), (1, 4), (3, 2), (3, 4), (2, 4), (1, 3, 2), (1, 3, 4), (1, 2, 4), (3, 2, 4), (1, 3, 2, 4)]

和第二个清单:

list_2 = [1,3,2,4]

在这种情况下,应删除(1, 3), (3, 2), (2, 4), (1, 3, 2), (3, 2, 4), (1, 3, 2, 4), (1, 3, 4), (1, 2, 4)中的元素list_1,因为它们包含list_2中连续的数字(不一定全部!)。

我想检查列表中的元素是否

我试过这样的事情:

for i in range(len(lista)):
    teste = []
    for j in range(len(lista[i])):
        for k in stuff:
            if len(lista[i]) >= 2:
                if lista[i][j] == k:
                    teste.append(k)
                    if len(teste) == 2:
                        lista.remove(lista[i])
                        teste=[]

            else:
                pass

使用此输出:

if len(lista[i]) >= 2:
IndexError: list index out of range

我试图检查一个数字,将它附加到列表中检查下一个数字,如果它也被附加,我将删除相应的元组。

3 个答案:

答案 0 :(得分:3)

在这里,我认为这有效。

如果要删除空白集,只需将其删除即可,但是您可以定义匹配项。我添加了评论代码来做到这一点。

根据您的评论修正

print("List 1:", list_1)
print("List 2:", list_2)
removeElements = []
for k in range(len(list_1)):
    #if len(list_1[k]) == 0:
    #    removeElements.append(k)
    count = 0
    for i in range(0, len(list_2)):
        for j in range(0, len(list_1[k])):
            if len(list_2) <= i + j:
                break
            count = count + 1
            if list_1[k][j] != list_2[i + j]:
                count = 0
            if count == 2:
                print("removing", list_1[k])
                removeElements.append(k)

removeElements = sorted(set(removeElements))
for i in range(len(removeElements)):
    list_1.pop(removeElements[i] - i)

print("List_1:", list_1)

答案 1 :(得分:0)

如果您从old python example抓取window食谱,这就变得简单了:

from itertools import islice

def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
    it = iter(seq)
    result = tuple(islice(it, n))
    if len(result) == n:
        yield result    
    for elem in it:
        result = result[1:] + (elem,)
        yield result

然后,您可以保留list_2

中未出现在任何窗口中的元素
[t for t in list_1 if t not in window(list_2, len(t))]

但是,您似乎有零或一个元素的特殊套管元组,因此您需要更改过滤器

[t for t in list_1 if len(t) < 2 or t not in window(list_2, len(t))]

答案 2 :(得分:0)

这是一种方法:

list_1 = [(), (1,), (1,2), (1,4)]
y = [list(i) for i in list_1]

list_2=[3,1,2,4]
x = [list_2[0:2], list_2[1:3], list_2[2:4]]

new_list_1 = [tuple(i) for i in y if i not in x[0:]]

输出:

[(), (1,), (1, 4)]