繁体   English   中英

如何比较Python列表中的元素

[英]How can I compare elements from a list of lists in Python

我有一个字符串列表的列表,我想在每个内部列表上获取最大的字符串,并将它们存储到另一个列表中。 例如:

tableData = [['apples','bananas','oranges','cherries'],
            ['Alice','Bob','Carol','David'],
            ['dogs','cats','moose','goose']]

widths = [0] * len(tableData)

我想在width [0]中存储tableData [0]中最长字符串的宽度,在widths [1]中存储tableData [1]中最长字符串的宽度,依此类推。 如何比较单词的长度以获得更大的长度?

我认为的唯一方法是这样做:

for f in range(len(tableData)):
    for c in range(len(tableData[1])):
        max = len(tableData[f][c])
        if max < len(tableData[f][c+1]):
            max = len(tableData[f][c+1])
    widths[f] = max
widths = [len(max(lst, key=len)) for lst in tableData]

对于名为tableData的列表列表,它给出:

[8, 5, 5]

说明:

[max(lst, key=len) for x in tableData]给您一个包含每个嵌套列表中最长字符串的列表。 然后使用len()获得它们的长度。

使用以下方法可以达到相同的结果:

widths = [len(sorted(lst, key=len)[-1]) for lst in tableData]

其中sorted(lst, key=len)将按长度从最短到最长对每个列表的元素进行排序。 然后,使用[-1]可以获取每个列表的最后一个值,即最长的字符串。 len()然后将计算它们的长度。

不用担心初始化宽度。 列表理解是您的朋友。

# creates a list of lists of word lengths
lengths_of_words = [[len(word) for word in x] for x in tableData]

# finds the max length for each list
widths = [max(y) for y in lengths_of_words]

也可以缩短为

widths = [max([len(word) for word in x]) for x in tableData]

如果人们想从我的错误中学习,这是一个古老的,错误的答案:

widths = [len(max(x)) for x in tableData]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM