如果条件满足第一级,如何停止循环

时间:2019-10-24 17:09:46

标签: python

如果我列表中任意两个元素的差等于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:在上述示例中,我得到以下输出 没有 是 没有 没有 没有 没有 没有

6 个答案:

答案 0 :(得分:2)

您可以使用combinations模块中的itertools来生成列表对,如果满足条件,则返回True,否则返回false。我添加了一条打印线,以便您可以查看它处理的组合。我也用TrueFalse来表达您的意思

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