如果我列表中任意两个元素的差等于n, 然后我将结果显示为True否则为
我已经在“ SHOW SOME CODE”区域中更新了代码详细信息。请参考
my_list = [1,3,4,9]
n = len(my_list)
z = 3
def checking(my_list,z):
count = 0
for i in range(0, n):
for j in range(i+1, n):
if my_list[i] - my_list[j] == z or my_list[j] - my_list[i] == z:
print('yes')
else:
print('No')
print(checking(my_list,z))
期望:如果我的列表是-[1,3,4,9]并且Z = 3 那么我期望输出为真(因为4-1 = 3) 我使用了2个循环。我可以只用一个循环解决这个问题吗?
Actual:在上述示例中,我得到以下输出 没有 是 没有 没有 没有 没有 没有
答案 0 :(得分:2)
您可以使用combinations
模块中的itertools
来生成列表对,如果满足条件,则返回True,否则返回false。我添加了一条打印线,以便您可以查看它处理的组合。我也用True
或False
来表达您的意思
from itertools import combinations
def checking(my_list, z):
for i, j in combinations(my_list, 2):
print("Checking pair: i=", i, ", j=", j)
if i - j == z or j - i == z:
return True
print("no matches found")
return False
my_list = [1, 3, 4, 9]
my_list2 = [1, 3, 5, 9]
z = 3
print(checking(my_list, z))
print(checking(my_list2, z))
输出
Checking pair: i= 1 , j= 3
Checking pair: i= 1 , j= 4
True
Checking pair: i= 1 , j= 3
Checking pair: i= 1 , j= 5
Checking pair: i= 1 , j= 9
Checking pair: i= 3 , j= 5
Checking pair: i= 3 , j= 9
Checking pair: i= 5 , j= 9
no matches found
False
答案 1 :(得分:0)
import sys
def checking(my_list,z):
for i in range(0, n):
for j in range(i+1, n):
if abs(my_list[i] - my_list[j]) == z :
return 'yes' # return ends the loop, by ending the entire function call
# else: # comment out if you don't want the "no"s printed
# print('No. (Iteration i={}, j={})'.format(i,j)) # comment out if you don't want the "no"s printed
# if it reaches here, then the both the loops finished
# without finding a True condition.
# So simply return the No (no reason for an else.)
return ("No")
my_list = [1,3,4,9]
n = len(my_list)
z = 3
print("First run with [{}]".format(my_list))
print(checking(my_list,z))
my_list = [1,1,1,1]
n = len(my_list)
z = 3
print("First run with [{}]".format(my_list))
print(checking(my_list,z))
输出:
First run with [[1, 3, 4, 9]]
yes
First run with [[1, 1, 1, 1]]
No
答案 2 :(得分:0)
在条件语句中的print语句之后尝试使用break语句。这用于退出您所处的任何条件或循环。这是假设您没有在方法中执行此操作,在这种情况下,我建议您返回“ yes”,该方法将自动退出该函数。要么应该工作。
答案 3 :(得分:0)
使用一个标志。当条件为真时,只需将标志设置为1并中断循环即可。如果flag未设置为1,则继续检查。
my_list = [1,3,4,9]
n = len(my_list)
z = 3
flag = 0
def checking(my_list,z):
for i in range(0, n) and flag is 0:
for j in range(i+1, n) and flag is 0:
if my_list[i] - my_list[j] == z or my_list[j] - my_list[i] == z:
flag = 1
if flag is 1:
print("True")
else:
print("False")
答案 4 :(得分:0)
对于:“预期:如果我的列表是-[1,3,4,9]并且Z = 3,那么我期望输出为真(因为4-1 = 3),所以我使用了2个循环。我可以只用一个循环来解决这个问题吗?”
这是使用二进制搜索的解决方案[IMP:要执行二进制搜索,应对列表进行排序]:
def checking(my_list, z):
low = 0
high = len(my_list)-1
while low < high:
find = my_list[high] - my_list[low]
if find == z:
return True
else:
if find > z:
high -=1
else:
low +=1
return False
print(checking([1,3,4,9],3))
print(checking([1,2,2,3],9))
使用Python在数据结构上访问此链接的丰富资源: https://runestone.academy/runestone/books/published/pythonds/SortSearch/TheBinarySearch.html
还有另一种方法可以提高效率,即哈希。将留给您研究解决方案。
答案 5 :(得分:0)
这是使用list comprehensions
实现目标的另一种方法。
在这里,我使用绝对差值
abs()
。实际的差异版本在下面(在更新部分中)。
my_list = [1,3,4,9]
z = 3
def checking(my_list,z):
outputs = [abs(i-j) for i in my_list for j in my_list if i != j and abs(i-j) == z]
if len(outputs):
print("Yes") # you can delete this line
return True
else:
print("No") # you can delete this
return False
# testing
print(checking(my_list, z))
输出:
Yes
True
更新:以下版本使用实际差异而不是绝对差异。
my_list = [1,3,4,9]
z = 3
def checking(my_list,z):
outputs = [(i-j) for i in my_list for j in my_list if i != j and (i-j) == z]
if len(outputs):
print("Yes") # you can delete this line
return True
else:
print("No") # you can delete this
return False
# testing
print(checking(my_list, z))
输出:
Yes
True
对于此版本,如果为z = -3
,结果将为:
Yes
True