Как я могу найти наибольшее число из заданной строки в Python?

1

У меня есть две строки, то есть 'This is a test as146634546576 string 12312523' и 'This is a test as576 string 12344612523'

Теперь я хочу напечатать наибольшие числа, т.е. 146634546576 и 12344612523 соответственно. Я написал следующий код, но он печатает только 146634546576 и 576. Где это должно быть 12344612523 вместо 576 !

def findLargestNumber(text):
    front = -1
    li = []
    li1 = []

    for i in range(len(text)):
        if front == -1:
            if text[i].isdigit():
                front = i
            else:
               continue
        else:
            if text[i].isdigit():
               continue
            else:
                li.append(int(text[front:i+1]))
                front = -1
    return max(li)
    #print max(li)

    for w in text.split():
        li1.append(int(w))
    return max(li1)
    #print max(li1)

    if max(li)>max(li1):
        return max(li)
    else:
        return max(li1)

print findLargestNumber('This is a test as146634546576 string 12312523')
print findLargestNumber('This is a test as576 string 12344612523')
  • 0
    Код не обрабатывает случай, когда самое длинное число находится в самом конце строки. Это число никогда не добавляется в li .
  • 1
    max(map(int, re.findall(r'(\d+)', s))) сделает эту работу!
Показать ещё 1 комментарий
Теги:
python-3.x
python-2.7

3 ответа

0
Лучший ответ

Используйте max() с re.findall:

import re

a = 'This is a test as576 string 12344612523'

print(max(map(int, re.findall(r'\d+', a))))
# 12344612523
  • 0
    Используйте finditer для эффективного использования памяти
0
import re
a = 'This is a test as146634546576 string 12312523'
b = 'This is a test as576 string 12344612523'
num_in_a = re.findall(r'[\d]+', a)
num_in_b = re.findall(r'[\d]+', b)
print(max(map(int, num_in_a)))
print(max(map(int, num_in_b)))

Выход:

146634546576
12344612523
0
import re

pa = re.compile(r'(\d+)')

def findLargestNumber(text):
  ma = pa.findall(text)
  num = [int(x) for x in ma]
  print(max(num))

findLargestNumber('This is a test as576 string 12344612523')
findLargestNumber('This is a test as146634546576 string 12312523')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню