将每个列表的元素与列表中的其他元素进行比较

时间:2014-05-04 15:34:09

标签: python list python-3.x

所以,有一个像

这样的清单
list=["one","two","ne","three"....]

我想知道,如何使用endswith()方法将列表中的每个元素与其他元素进行比较? 在此列表中,例如,list [0] endwith list [2]。

我自己无法进行比较。 我尝试过这样的事情:

aa=list
flg=False
for i in range(len(ll)-1):
    aa.append(ll[i+1])
    if ll[i].endswith(aa[i]):
        flg=True

但是,它只适用于第一个元素,而不是每个元素。

2 个答案:

答案 0 :(得分:2)

使用集合:

words = {"one","two","ne","three"}

[x for x in words if any(word.endswith(x) for word in words - {x})]
Out[69]: ['ne']

基本上,对于每个元素,将其从words集中删除,然后测试截断集中的任何其他单词是否以该单词结尾。

答案 1 :(得分:1)

您只是在列表中进行了一次传递,即使您已将目标定为“将列表中的每个元素与其他元素进行比较”。这需要在列表中对每个元素进行一次遍历列表。如果您有n个项目,则每个项目将遍历列表n次,总共n ^ 2次遍历。

因此,在解决方案中需要两个 for循环:一个遍历列表一次并选择将要比较的元素,并在该循环内,另一个将检查该元素与其他元素

for n in ll:
    for m in ll:
        if m.endswith(n) and m != n:
            print(m, "ends with", n)