代码之家  ›  专栏  ›  技术社区  ›  Maximilian Burszley

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

  •  1
  • Maximilian Burszley  · 技术社区  · 6 年前

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

    样本数据:

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

    目标:
    计算字符长度最长的行并返回该值。基本上,找出 dict.values() 最大值为 那个 从集合中。

    我试图用嵌套的理解,但我被困在某个地方。以下是迄今为止我所做的尝试:

    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 回复  |  直到 6 年前
        1
  •  0
  •   user3483203    6 年前

    创建字典列表,并查找每个列表项值的总长度,并标识最大长度:

    下面是一个使用列表理解和 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
    ]
    
        2
  •  1
  •   akilat90    6 年前

    使用熊猫

    因为csv包含一个表格结构,所以我们也可以使用panda。

    import pandas as pd
    

    可以使用加载文件 df = pd.read_csv(path) ,返回以下数据帧:

    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
    
        3
  •  0
  •   Tim    6 年前

    类似下面这样的方法应该有效:

    max([len(i) for i in file_content])
    
        4
  •  0
  •   Dani Mesejo    6 年前

    如果需要行,可以将自定义键传递给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'}