跳过它已经完成的值的循环

时间:2016-02-07 22:54:20

标签: arrays python-2.7 loops

使用此代码我可以采取所有不同的可能性,将它们添加到一起并将数据放入我的数组中。问题是我得到了一些我想跳过的重复数据。例如:

  

首先:name1,name2,这两个的总分和这两个的总价。   然后:name2,name1,这两个的总分和这两个的总价。 这是完全相同的结果,但顺序不同。

数据是包含约50行(名称,价格和点数)的3个列的列表

price = 0
points = 0

l1 = []
l2 = []
l3 = []
l4 = []

for i in range(0,18):
    for i2 in range(0,18):
        points = data['Points'][i]+data['Points'][i2]
        price = data['Price'][i]+data['Price'][i2]

        if price < 10 and i != i2:
            l1.append(points)
            l2.append(price)
            l3.append(data['Name'][i])
            l4.append(data['Name'][i2])

            print points , price, data['Name'][i], data['Name'][i2]
            print '_____'
            print ''

问题:如何解决问题?

2 个答案:

答案 0 :(得分:0)

将你的循环更改为此以避免重复两次组合:

for i in range(0,18):
    for i2 in range(0,i):
        ...

我会将points = data['Points'][i]+data['Points'][i2]计算延迟到if个案后,以节省一点时间。

并且您不需要初始化price = 0, points = 0之类的变量,因为无论如何它们都会在每次迭代时重新定义。 Python是一个动态语言,因此通常不需要变量声明。

答案 1 :(得分:0)

您可以使用字典而不是一堆列表来确保每个名称组合只有一个条目。

results = {}
for i in range(0,18):
    for i2 in range(0,18):
        if i == i2:
            continue

        # Your dictionary key will be a tuple of the names. 
        #Use min and max to ensure the same pair of names always makes the same key
        key = (min(data['Name'][i], data['Name'][i2]), \
               max(data['Name'][i], data['Name'][i2]))
        if key in results:
            continue

        points = data['Points'][i]+data['Points'][i2]
        price = data['Price'][i]+data['Price'][i2]

        if price < 10:
            results[key] = (points, price)

            print points , price, data['Name'][i], data['Name'][i2]
            print '_____'
            print ''