我有一个字符串列表列表,我希望获得每个内部列表中最大的字符串,并将它们存储到另一个列表中。例如:
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
答案 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]