Python 如何在字符串列表中查找最长的字符串?

Python 如何在字符串列表中查找最长的字符串?,python,python-3.x,string,list,Python,Python 3.x,String,List,如何在列表中查找最长的字符串 此列表包含字符串和字符串列表 一组字符串,但奇怪的是,我正在检查的字符串在列表中,这些列表与更大列表中的字符串混合在一起 “条目”的示例值: extries = [["this is text", "more text"], "another string"] python代码 length = 0 for i in entries: if(type(i) is list): for x in i:

如何在列表中查找最长的字符串

此列表包含字符串和字符串列表

一组字符串,但奇怪的是,我正在检查的字符串在列表中,这些列表与更大列表中的字符串混合在一起

“条目”的示例值:

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=0

以下代码将为您提供最大字符串的长度——不管它是否在子集内

entries=[[“这是文本”、“更多文本”]、“另一个字符串”]
长度=0
对于条目中的i:
如果类型(i)为列表:
值=len(最大值(i,键=len))
如果长度<值:
长度=值
其他:
值=len(i)
如果长度<值:
长度=值
打印(len(“这是文本”)、len(“更多文本”)、len(“另一个字符串”))
打印(长度)
产出:

12 9 14
14

我将代码分为两部分,首先是一个函数,它可以展平任意深度的列表:

def展平(lst、ret):
对于lst中的x:
如果类型(x)==列表:
展平(x,ret)
其他:
ret.append(x)
然后,只需将其与输入和空列表一起使用,即可得到一个展开的列表,并调用max:

temp=[]
条目=[[“这是文本”、“更多文本”]、“另一个字符串”]
展平(条目、温度)
最大值(温度,键=透镜)

请注意,这也适用于这样的输入
条目=[[[“这是文本”,“更多文本”],[“另一个字符串”],“它们中最长的字符串”]

对于任意深度嵌套的列表,我首先制作一个列表展平函数:

def flatten_nested_list(lst):
    for item in lst:
        if isinstance(item, list):
            yield from flatten_nested_list(item)
        else:
            yield item
然后您可以使用
key=len
调用以获取最长的单词:

print(max(flatten_nested_list(entries), key=len))
# another string

请为您给出的示例添加您希望代码输出的内容,否则我们不确定您的问题是什么意思。还有
Ah!问题是操作人员少!在我的原始代码中,我使用了C++的习惯,很高兴你把它解决了。旧习难改!很好,我有同样的想法我不知道
ỳ这真是太好了!您不需要将其强制转换为列表,您可以将生成器直接传递给max。这使得它比我的解决方案更高效(除了不递归的好处之外)。
print(max(flatten_nested_list(entries), key=len))
# another string