如何检查索引,以确定第N个索引是否应大于先前的索引

3
我希望运行一个从0到1000的循环,我想打印小于前一位数字的数字“例如:123中3大于2,2大于1,因此打印123”,我尝试了从1到100并检查1000或更大的数字,我试图将int类型的输入转换为列表并检查2个数字。
no=int(input())
lis=[]
num_lis=[]
le=0

for i in range(10,no):
    lis=str(i)
    num_lis=[int (x)for x in lis]
    le=len(num_lis)-1
    if num_lis[le]>num_lis[le-1]:
        print(i)

从1到100没有问题,我想检查三位数是否像1<2<3,如果正确则打印i。我的代码只检查最后两位数字,如何检查三位和四位数字?

2个回答

3
你可以创建一个函数来验证数字是否按顺序排列:
def int_sorted(i):
    s = str(i)
    return s == ''.join(sorted(s, key=int))

print(int_sorted(123))
print(int_sorted(1234))
print(int_sorted(4234))

输出

True
True
False

注意 sorted(s, key=int) 根据每个数字的 int 值对 s(数字字符串)进行排序,通过使用 sortedkey 参数。此函数与数字数量无关。
如果必须严格大于,则可以执行以下操作:
def int_sorted(i):
    s = str(i)
    sorted_s = sorted(s, key=int)
    return s == ''.join(sorted_s) and all(int(c) < int(n) for c, n in zip(sorted_s, sorted_s[1:]))

print(int_sorted(123))
print(int_sorted(1234))
print(int_sorted(4234))
print(int_sorted(99))

输出

True
True
False
False

1
这是错误的。print(int_sorted(99))也返回true。 - Bitto
排序是一种开销,你根本不需要... - Patrick Artner

3

打印所有小于其后数字的数字:

你可以简单地记住一个数字,如果下一个数字更大,则打印它:

number = None

while number is None:
    number = int(input("Input a number: ")) 
number = str(number)

last_digit = int(number[0])
for s in number[1:]:
    this_digit = int(s)
    if this_digit > last_digit:
        print(last_digit, end="")
        last_digit = this_digit
print(last_digit)

12354的输出结果:

1235

这将打印所有小于下一个数字的数字。

检查数字是否“按升序排列”:

要简单检查,您可以使用zip()。字符'0123456789'按此顺序进行比较:'0'<'1'<'2'<'3'<'4'<'5'<'6'<'7'<'8'<'9' - 无需将其转换为整数,只需按原样比较字符即可:

def IsIncreasing(number):
    n = str(number)
    return all(a<b for a,b in zip(n,n[1:]))

这是如何工作的?它从数字和数字加1中创建元组:
"123456789" 
"23456789" 
==> ('1','2'),('2','3'),...,('7','8'),('8','9') as generator of tuples

并使用all()确保所有第一个元素都小于第二个元素。

示例:

for k in [1234,1,123456798]:
    print(k,IsIncreasing(k))

输出(重新格式化):

1234      True
1         True
123456798 False

没有必要通过排序来比较,这需要更多的计算。


测试1到1000之间的所有数字:

您可以使用IsIncreasing()函数创建一个从1到1000所有“递增”的数字列表:

get_all_up_to_1000 = [k for k in range(1,1001) if IsIncreasing(k)]

print( *(f"{k:>3}," for k in get_all_up_to_1000))

输出:

  1,   2,   3,   4,   5,   6,   7,   8,   9,  12,  13,  14,  15,  
 16,  17,  18,  19,  23,  24,  25,  26,  27,  28,  29,  34,  35,  
 36,  37,  38,  39,  45,  46,  47,  48,  49,  56,  57,  58,  59,  
 67,  68,  69,  78,  79,  89, 123, 124, 125, 126, 127, 128, 129, 
134, 135, 136, 137, 138, 139, 145, 146, 147, 148, 149, 156, 157, 
158, 159, 167, 168, 169, 178, 179, 189, 234, 235, 236, 237, 238, 
239, 245, 246, 247, 248, 249, 256, 257, 258, 259, 267, 268, 269, 
278, 279, 289, 345, 346, 347, 348, 349, 356, 357, 358, 359, 367, 
368, 369, 378, 379, 389, 456, 457, 458, 459, 467, 468, 469, 478, 
479, 489, 567, 568, 569, 578, 579, 589, 678, 679, 689, 789,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接