如何比较Python中列表列表中的元素

时间:2017-03-15 00:00:50

标签: python list

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

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

widths = [0] * len(tableData)

我想存储宽度[0],tableData [0]中最长字符串的宽度,宽度[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

2 个答案:

答案 0 :(得分:2)

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()将计算其长度。

答案 1 :(得分:-1)

不要担心初始化宽度。 List comprehensions是你的朋友。

# 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]