如何检查列表是否包含任何顺序的一组值 - Python

时间:2014-07-27 15:11:33

标签: python-2.7

我正在编写一个采用三角形数字的程序,并找到最多三个其他三角形数字的集合,其总和等于第一个。我目前的所有代码都在下面。如果您运行程序并输入10作为输入,它将打印出前10个三角形数字的列表以及总和为10的较小三角形数字的组合。

我试图做的是,如果再次使用10示例,则阻止相同的答案以不同的顺序出现,输出为:

6 + 21 + 28 = 55

6 + 28 + 21 = 55

10 + 45 = 55

21 + 6 + 28 = 55

21 + 28 + 6 = 55

28 + 6 + 21 = 55

28 + 21 + 6 = 55

45 + 10 = 55

但显然6 + 21 + 28 = 55与6 + 28 + 21 = 55相同,10 + 45 = 55和45 + 10 = 55等等......他们只是在一个不同的顺序。那么有谁知道一个简单的方法我可以检查以确保这组值不以任何顺序重复?如果您仍然对我尝试做的事情有疑问,请发表评论然后尝试解释一下这一点。

代码:

def f(x):
    newX = 0
    for i in range(0,x):
        newX = newX + i
    return newX

def main():
    lst = []
    inpt = input("What number triangular number would you like to test: ")
    for i in range(2,inpt+2):
        x = f(i)
        lst.append(x)
    find(x, lst)

#x is the triangular number, lst is list of all of them up to it
def find(x, lst):
    a = 0
    b = 0
    c = 0
    length = len(lst)
    print(lst)
    last = lst[length-1]
    for j in lst:
       a = j

        for k in lst:
            b = k
            if(a+b == x):
                if(a != b):
                    print(str(a) + " + " + str(b) + " = " + str(x))

            for i in lst:
                c = i
                if(a+b+c == x):
                    if(a != b and a != c and b != c):

                        print(str(a) + " + " + str(b) + " + " + str(c) + " = " + str(x))
     print

main()

1 个答案:

答案 0 :(得分:1)

提示

>>> [1, 2, 3] == [1, 3, 2]
False
>>> sorted([1, 3, 2])
[1, 2, 3]
>>> [1, 2, 3] == sorted([1, 3, 2])
True

规范化是一组元素只有一个排序的过程。这使得相同元素的不同排序之间的比较变得相等。

相关问题