使用此代码我可以采取所有不同的可能性,将它们添加到一起并将数据放入我的数组中。问题是我得到了一些我想跳过的重复数据。例如:
首先: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 ''
问题:如何解决问题?
答案 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 ''