Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何比较列表中包含数字的字符串?_Python_String_List_Csv_Integer - Fatal编程技术网

Python 如何比较列表中包含数字的字符串?

Python 如何比较列表中包含数字的字符串?,python,string,list,csv,integer,Python,String,List,Csv,Integer,如何从列表中删除包含大于某个阈值的数字的字符串行 我希望我的阈值大于60,因为歌曲的持续时间不可能是4:63(4分63秒) 筛选前的列表: [['4:63', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '4:20', 'F']] [['A', 'B', 'C'], ['D', '4:20', 'F']] [['A', 'B', 'C'], ['D', '4:20', 'F']] 过滤后的预期列表: [['4:63', ' Test', 'Res

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

我希望我的阈值大于60,因为歌曲的持续时间不可能是4:63(4分63秒)

筛选前的列表:

[['4:63', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '4:20', 'F']]
[['A', 'B', 'C'], ['D', '4:20', 'F']]
[['A', 'B', 'C'], ['D', '4:20', 'F']]
过滤后的预期列表:

[['4:63', ' Test', 'Results'], ['A', 'B', 'C'], ['D', '4:20', 'F']]
[['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)

您可以使用正则表达式获取所有数字,然后使用
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']]

单向让
datetime.strtime
判断:

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)] 
输出: