【问题标题】:How to compare strings containing numbers in a list?如何比较列表中包含数字的字符串?
【发布时间】:2021-03-03 13:32:33
【问题描述】:

如何从列表中删除包含大于某个阈值的数字的一行字符串。

我希望我的阈值超过 60,因为歌曲的时长不可能达到 4:63(4 分 63 秒)

过滤前的列表:

[['4:63', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '4:20', 'F']]

过滤后的目标列表:

[['A', 'B', 'C'], ['D', '4:20', 'F']]

所以基本上我的问题是:如何在列表列表中识别,并删除包含大于 60 的数字的字符串的行。

我的代码:

def get_csv_as_table(a, b):
    import csv

    with open(a) as csv_file:
        file_reader = csv.reader(csv_file, delimiter=b)
        member = list(file_reader) 
        for i in range(len(member)):
            for j in range(len(member)):
                if member[i][j].isdigit():
                    member[i][j] = int(member[i][j])
        print(member)
        return member

def filter_table(member):
    clean_sample_data = [row for row in member if not "" in row]
    print(clean_sample_data)

member = []
print ("Enter filename: ")
a = input()
print ("Enter the delimiter: ")
b = input()
member = get_csv_as_table(a, b)
filter_table(member)

【问题讨论】:

    标签: python string list csv integer


    【解决方案1】:

    datetime.strptime判断的一种方式:

    import re
    from datetime import datetime
    
    matcher = lambda x: re.match("\d+:\d+", x)
    
    def is_validtime(str_):
        if matcher(str_):
            try:
                ms = datetime.strptime(str_, "%M:%S")
            except:
                return False
        return True
    
    [i for i in l if all(is_validtime(j) for j in i)] 
    

    输出:

    [['A', 'B', 'C'], ['D', '4:20', 'F']]
    

    【讨论】:

      【解决方案2】:

      您可以使用正则表达式获取所有数字,然后使用any() 检查列表理解中没有一个高于60

      import re
      
      lst = [['4:63', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '4:20', 'F']]
      filtered_lst = [
          sub_lst 
          for sub_lst in lst
          if not any(x > 60 for x in map(int, re.findall(r'\d+', ''.join(sub_lst))))
      ]
      print(filtered_lst)
      

      输出:

      [['A', 'B', 'C'], ['D', '4:20', 'F']]
      

      【讨论】:

        猜你喜欢
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        相关资源
        最近更新 更多