检查整数列表(Python)中是否有升序
给出如下列表:检查整数列表(Python)中是否有升序,python,list,algorithm,sorting,integer,Python,List,Algorithm,Sorting,Integer,给出如下列表: [[2, 7], [1, 4], [0, 5, 6]] 如何检查此列表中是否存在有效的升序。例如,这是正确的,因为我可以形成以下顺序: [2,4,5] 我需要一个算法,它可以找到一个任意大的列表,任意大小的列表的有效顺序。不会重复任何整数值,并且子列表已排序 编辑: 这是我目前尝试过的,但它无法扩展到更大的列表 allNumbers = [[2, 7], [1, 4], [0, 5, 6]] smallest = min(allNumbers[0]) largest = m
[[2, 7], [1, 4], [0, 5, 6]]
如何检查此列表中是否存在有效的升序。例如,这是正确的,因为我可以形成以下顺序:
[2,4,5]
我需要一个算法,它可以找到一个任意大的列表,任意大小的列表的有效顺序。不会重复任何整数值,并且子列表已排序
编辑:
这是我目前尝试过的,但它无法扩展到更大的列表
allNumbers = [[2, 7], [1, 4], [0, 5, 6]]
smallest = min(allNumbers[0])
largest = max(allNumbers[2])
for n in allNumbers[1]:
if smallest < n < largest:
return True
allNumbers=[[2,7]、[1,4]、[0,5,6]]
最小值=最小值(所有数字[0])
最大值=最大值(所有数字[2])
对于所有数字[1]中的n:
如果最小值
您可以使用像这样的贪婪算法来解决它
a = [[2, 7], [1, 4], [0, 5, 6]]
current = min(a[0])
possible = True
for l in a[1:]:
possible = False
for i in l:
if i >= current:
possible = True
current = i
break
if not possible:
break
print(possible) #returns True
对于每个子列表,找到仍然比前一个最小元素大的最小元素。如果没有这样的元素,那么就没有提升路径
from math import inf
def ascend(xss):
smallest = -inf
path = []
for xs in xss:
smallest = min(x for x in xs if x > smallest)
path.append(smallest)
return path
这是我的答案
def tell_if_the_lists_are_in_order(lists):
min_first = min(lists[0]) # for empty input, return True.
prev_min = min_first
for sublist in lists[1:]:
min_num = min(sublist)
max_num = max(sublist)
if max_num <= prev_min:
return False
prev_min = min(x for x in sublist if x > prev_min)
return True
def告诉\u列表是否按顺序排列(列表):
min_first=min(列出[0])#对于空输入,返回True。
上一个最小值=最小值第一个
对于列表[1:]中的子列表:
最小值=最小值(子列表)
max_num=max(子列表)
如果最大值(上一个最小值)
返回真值
以下是我的答案:
def IsAscending(list):
ascend = True
int a;
for i in list:
if i == 0:
a = list[i]
else:
if list[i] >= a:
a = list[i]
else:
ascend = False
return ascend
这是我得出的最终解决方案
def validList(chLocations):
ascendingOrder = []
smallest = min(chLocations[0])
maximum = max(chLocations[-1])
ascendingOrder.append(smallest)
chLocations = chLocations[1:]
for i in range(len(chLocations)-1):
for number in chLocations[i]:
if number > max(ascendingOrder):
ascendingOrder.append(number)
break
ascendingOrder.append(maximum)
if sorted(ascendingOrder) == ascendingOrder:
return True
else:
return False
说明:
[[2, 7], [1, 4], [0, 5, 6]] --> [2,4,5] == True
[[1, 3], [7], [2]] --> [1,7,2] == False
欢迎来到SO。你也可以发布你尝试过的内容吗?我刚刚添加了我尝试过的内容,但我一直在想,对于纵向大于3的列表,它将如何扩展?你到底是什么意思?什么算是“此列表中的有效升序”?不清楚你在问什么。很乐意帮忙。:)那么对于
[[2],[1],[3]]
您想要True
?因为这就是您的解决方案所说的(在添加缺少的:
)之后)。
>>> validList([[2, 7], [1, 4], [0, 5, 6]])
True
>>> validList([[1, 3], [7], [2]])
False
[[2, 7], [1, 4], [0, 5, 6]] --> [2,4,5] == True
[[1, 3], [7], [2]] --> [1,7,2] == False