Как сравнить длину строки с целым числом в том же списке? - PullRequest
1 голос
/ 05 ноября 2019

Мое задание - получить список от пользователя и распечатать второй по величине элемент в указанном списке.

Пользователь должен иметь возможность вводить строки или целые числа.

У меня возникают проблемы при сравнении двух, поскольку я получаю ошибки при использовании max ().

Вот мой код:


list_input_amount = int(input('How many items are in your list?: '))

for amount in range(list_input_amount):
    list_input = input('Please enter your list item: ')
    if list_input.isnumeric():
        random_list.append(int(list_input))
    else:
        random_list.append(list_input)

print(random_list)


def second_largest():
    maximum_list = set(random_list)
    maximum_list.remove(max(maximum_list))

    print(max(maximum_list))

second_largest()

Заранее спасибо за помощь

1 Ответ

1 голос
/ 05 ноября 2019

Вы можете продиктовать {}, чтобы сохранить значение, которое будет использоваться для сравнения, а затем отсортировать и взять второе.

Вот код, немного более общий для получения nth элемент:

# List comprehension
def nth_largest(values: {}, nth=0):
    return [k for k,v in sorted(values.items(), key=lambda kv:kv[1], reverse=True)][nth][0]

# Two steps
def nth_largest(values: {}, nth=0):
    sorted_x = sorted(values.items(), key=lambda kv: kv[1], reverse=True)
    return list(sorted_x)[nth][0]


if __name__ == '__main__':
    list_input_amount = int(input('How many items are in your list?: '))
    dico_values = {}
    for amount in range(list_input_amount):
        list_input = input('Please enter your list item: ')
        if list_input.isnumeric():
            dico_values[int(list_input)] = int(list_input)
        else:
            dico_values[list_input] = len(list_input)
    print(nth_largest(dico_values, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...