Hackerrank问题:列表理解中的几个for循环

时间:2019-06-18 23:08:02

标签: python

我正在解决hackerrank中的一个问题,看看: https://www.hackerrank.com/challenges/between-two-sets/problem

我正在尝试编写一行代码

所以我尝试创建一个列表,该列表使用range (a[-1],b[0])遍历第一个数组的最后一个整数和第二个数组的第一个整数之间的所有整数

比我想将if i%j==0 and x%i==0的2个条件和j和x应用于2个数组a和b中的整数for j in a for x in b set()检索重复项

def getTotalX(a, b):
    inbetween = set([i for i in range (a[-1],b[0]) for j in a for x in b if i%j==0 and x%i==0])
    return (inbetween)

输出[4, 4, 4, 4, 4, 4, 6, 8, 8, 8, 8, 8, 8, 12, 12]

代码是这样的:在每个i上,它将它与循环的第一个j进行比较,如果符合条件则将i添加到数组中,然后将相同的ifor j in a循环的下一个迭代进行比较,如果相同,则在数组中再次添加相同的i

如何编写代码以将一个i与数组j中的所有a进行比较?我可以在同一行上写吗?

2 个答案:

答案 0 :(得分:1)

正如@Prune所说,anyall可以使代码更短,并且在我看来更易读(比起break和事物)。

def getTotalX(a, b):
    return {i for i in range(a[-1], b[0])
               if all(i % j == 0 for j in a)
              and all(x % i == 0 for x in b)}

getTotalX([2, 6], [24, 36]) # {6, 12}

答案 1 :(得分:0)

感谢您的帮助,并为帖子中的混乱感到抱歉。

输入:

[2,4]
[16,32,96]

输出: 3

说明: 输出是满足以下条件的两个数组之间的整数数量:

1-第一个数组的元素都是要考虑的整数的所有因数

2-被考虑的整数是第二个数组的所有元素的因数

所以这里的输出为3,因为有3个满足这些条件的整数: 4、8和16

例如4

1- 4%2=04%4 =0

2- 16%4=032%4=096%4=0

因此,感谢您的帮助,我提交了此文件,该文件已成功!

def getTotalX(a, b):
    return len([i for i in range(a[-1],b[0]+1) if all(i%j==0 for j in a) and all(x%i==0 for x in b)])

感谢您的帮助!我想我必须使用比i,j,x更好的命名才能获得更大的代码