从字符串集合中查找最大长度

时间:2018-11-27 19:00:53

标签: python

我当时正在努力解决另一个问题,但是遇到了不确定如何计算长度的步骤。

样本数据:

file_content = [
    '"Track","Artist","Album","Time"',
    '"Computer Love","Kraftwerk","Computer World","7:15"',
    '"Paranoid Android","Radiohead","OK Computer","6:27"'
]

目标:
计算具有最大字符长度的任何行,然后返回该值。基本上,从集合中找到dict.values()的字符总和和 that 的最大值。

我尝试使用嵌套的理解,但是我陷入了困境。到目前为止,这是我尝试过的:

import csv
rows = [r for r in csv.DictReader(file_content)]
max([sum(len(v)) for row in rows for v in row.values()])

4 个答案:

答案 0 :(得分:1)

使用熊猫

由于csv包含表格结构,因此我们也可以使用熊猫。

import pandas as pd

可以使用df = pd.read_csv(path)加载文件,该文件将返回以下DataFrame:

Track                      Artist     Album           Time
Computer  Love             Kraftwerk  Computer World  7:15
Paranoid  Android          Radiohead     OK Computer  6:27

然后我们可以将行连接起来并取合并字符串长度的最大值

df["Concat"] = [''.join(row.astype(str)) for row in df.values]

Track           Artist      Album           Time    Concat
Computer Love   Kraftwerk   Computer World  7:15    Computer LoveKraftwerkComputer World7:15
Paranoid Android    Radiohead   OK Computer 6:27    Paranoid AndroidRadioheadOK Computer6:27

df["Concat"].str.len().max()
#40

答案 1 :(得分:0)

类似以下的方法应该起作用:

max([len(i) for i in file_content])

答案 2 :(得分:0)

您创建了一个字典列表,您想找到每个列表项值的总长度,并确定最大长度:

以下是使用列表理解和str.join的解决方案:

lengths = [
    len(''.join(row.values())) for row in rows
]

max(lengths)

40

您当前的尝试实际上已经非常接近,您只是错误地划分了表达式。这是一个工作版本:

[
    sum(len(i) for i in row.values())
    for row in rows
]

答案 3 :(得分:0)

如果需要该行,可以将自定义键传递给max:

import csv

file_content = [
    '"Track","Artist","Album","Time"',
    '"Computer Love","Kraftwerk","Computer World","7:15"',
    '"Paranoid Android","Radiohead","OK Computer","6:27"'
]
rows = [r for r in csv.DictReader(file_content)]
result = max(rows, key=lambda r: sum(map(len, r.values())))
print(result)

输出

{'Track': 'Computer Love', 'Album': 'Computer World', 'Time': '7:15', 'Artist': 'Kraftwerk'}
相关问题