【问题标题】:How can I compare elements from a list of lists in Python如何比较 Python 列表中的元素
【发布时间】:2017-03-15 00:00:50
【问题描述】:

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

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

widths = [0] * len(tableData)

我想在widths[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

【问题讨论】:

  • 你试过什么?你的困难在哪里?

标签: python list


【解决方案1】:
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()然后会计算它们的长度。

【讨论】:

  • 这工作得很好,非常感谢。我不知道 max() 函数,所以我正在研究以了解更多信息。
  • 没问题。这里重要的部分是max(lst_of_strings) 按字典顺序比较字符串,即返回按字母顺序排序时最后出现的字符串。因此,要获得最长的字符串,我们需要max(lst_of_strings, key=len)。然后要获得它们的实际长度,可以使用len()
【解决方案2】:

不用担心初始化宽度。 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]

【讨论】:

  • 您在列表中找到“最大”项的长度,在这种情况下将是“橙子”,因为 o 高于其他开头字母。当长度最长的字符串是樱桃时。 (在第一个列表中)
  • 感谢@Wright 的帮助,这就是我在充电时得到的,就像我知道的一样
猜你喜欢
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多