我想遍历列表以查找等于变量“ N”的对的总和。无需重复配对
list=[0,1,2,3,4]
重复对
[0,1],[1,0],[2,3],[3,2]....etc
[0,0],[1,1],[2,2],[3,3]...etc
代码
num_list=[28,33,34,65,71]
n=99
pair=0
count=0
for i in range(len(num_list)-1):
for j in range(len(num_list)):
if i==j:
pass
else:
pair=num_list[i] + num_list[j]
if pair == n:
count+=1
print(count)
预期产量
2
我的输出
3
答案 0 :(得分:1)
from itertools import combinations
lst = [28,33,34,65,71]
n = 99
cnt = 0
for entry in combinations(lst,2):
if sum(entry) == n:
cnt +=1
print(cnt)
输出
2
答案 1 :(得分:0)
您要检查列表中的每个数字及其后的每个数字。您可以通过切片第一个列表来实现。
第一个循环将除最后一个数字以外的所有内容切片。您不需要它,因为您将对照所有其他数字进行检查。
第二个循环中,将所有数字从当前数字切到列表末尾,然后检查这些数字。除非列表中出现两次,否则您将不会检查任何单一数字。
num_list=[28,33,34,65,71]
n=99
count=0
for index, num1 in enumerate(num_list[:-1]):
for num2 in num_list[index:]:
if num1+num2 == n:
count += 1
print(count)
输出:
2
答案 2 :(得分:0)
如果要使用现有的循环结构,可以添加一个列表来跟踪已经算作一对的num_list[i]
值。然后,在每次迭代中,检查您的num_list[j]
值是否在该列表中。如果是的话,那么您就知道这对已经被按相反的顺序计算了。
num_list=[28,33,34,65,71]
prev_i = [] #this will keep track of i's that have been in a counted pair
n=99
pair=0
count=0
for i in range(len(num_list)-1):
for j in range(len(num_list)):
if i==j:
pass
else:
pair=num_list[i] + num_list[j]
#Check if pair are the same or already counted
if pair == n and (not num_list[j] in prev_i):
prev_i.append(num_list[i]) #add i to the prev_i list
count+=1
print(count)