Как найти самую длинную строку в списке списков строк? - PullRequest
2 голосов
/ 28 октября 2019

Как найти самую длинную строку в списке?

Этот список содержит как строки, так и список строк.

набор строк, но странность заключается в том, что строки I 'm проверки находятся в списках, и эти списки смешиваются со строками в большом списке.

Пример значения для «записей»:

extries = [["this is text", "more text"], "another string"]

код Python

length = 0
for i in entries:
        if(type(i) is list):
            for x in i:
                x = str(x)
            if length << len(max(i, key = len)):
                length = len(max(i, key = len))
        else:
            for i in entries:
                i = str(i)
                if length << len(i):
                    length = len(i)

Это должно сделать

length = len(max(["this is text","more text","another string"])

, но это делает length = 0.

Ответы [ 3 ]

1 голос
/ 28 октября 2019

Я бы разбил код на две части, во-первых, есть функция, которая выравнивает произвольно глубокий список:

def flatten(lst, ret):
    for x in lst:
        if type(x) == list:
            flatten(x, ret)
        else:
            ret.append(x)

Затем просто используйте его для ввода и пустой список, чтобы выровнять списоки вызовите max:

temp = []
entries = [["this is text", "more text"], "another string"]
flatten(entries, temp)
max(temp, key=len)

Обратите внимание, что это также будет работать с таким входом, как этот entries = [[["this is text", "more text"]], ["another string"], "the longest string of them all"].

1 голос
/ 28 октября 2019

Для произвольных глубоких вложенных списков я бы сначала сделал функцию выравнивания списка:

def flatten_nested_list(lst):
    for item in lst:
        if isinstance(item, list):
            yield from flatten_nested_list(item)
        else:
            yield item

Затем вы можете вызвать max() с помощью key=len, чтобы получить самое длинное слово:

print(max(flatten_nested_list(entries), key=len))
# another string
1 голос
/ 28 октября 2019

Следующий код даст вам длину самой большой строки - независимо от того, находится она внутри подмножества или нет.

entries = [["this is text", "more text"], "another string"]

length = 0
for i in entries:
    if type(i) is list:
        value = len(max(i, key=len))
        if length < value:
            length = value
    else:
        value = len(i)
        if length < value:
            length = value

print(len("this is text"), len("more text"), len("another string"))
print(length)

Выходы:

12 9 14
14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...