如何比较列表中包含数字的字符串?
How to compare strings containing numbers in a list?
如何从列表中删除一行包含大于特定阈值的数字的字符串。
我希望我的阈值超过 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)
您可以使用正则表达式获取所有数字,然后使用 any()
检查其中 none 在列表理解中是否高于 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.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']]
如何从列表中删除一行包含大于特定阈值的数字的字符串。
我希望我的阈值超过 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)
您可以使用正则表达式获取所有数字,然后使用 any()
检查其中 none 在列表理解中是否高于 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.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']]