我有两个数组,arr_x
和arr_y
。这些数组包含整数1到20,没有重复,并且并非所有1到20的整数都在这些数组中。例如:
arr_x = [4,5,6,7]
arr_y = [16,15,14,13]
我从1开始算起来,让我说到7,我想找到这些数组中 的下一个最大整数,然后执行一个动作,如果它在arr_y
,如果它位于arr_x
,则不执行任何操作。
参考它会发现的例子,这两个数组中的下一个最大整数是13,它在arr_y
中,所以它会执行动作。
我一直坚持这个没有嵌套所有这些if和for循环,它变得非常草率,任何想法?
答案 0 :(得分:1)
我能想到的最简单的答案:过滤掉所有低于或等于7的值,然后选择剩余的最低值。
try:
# Replace 7 with increasing variable if run in loop.
if min(filter(lambda n: n > 7, arr_x + arr_y)) in arr_y:
perform_some_action()
except IndexError:
print('There is no next biggest integer.')
答案 1 :(得分:1)
我扩展了@Banana的答案以包含值来自哪个列表所以应该很容易检查它是否来自arr_y使用...
if findNextLargest(arr_x,arr_y)[1] #to check if it is arr_y
def findNextLargest(arr_x,arr_y):
res = False
for i,each in enumerate([arr_x,arr_y]):
#enumerate will mark which list it comes from
#order is important so you can overwrite answer if found in X and Y, Answer Priority is given to Y
filtered = filter(lambda n: n > 7,each) #filters using @Banana logic
if filtered:res= (min(filtered),i) #grabs next largest using @Banana logic
return res #returns a tuple where first value is the next largest value and second is the list it comes from where 1 is y and 0 is x