如何在Python中将列表转换为浮点
我正试图写一个程序来寻找表格中的行如何在Python中将列表转换为浮点,python,regex,Python,Regex,我正试图写一个程序来寻找表格中的行 New Revision: 39772 提取所有数字,然后找到平均值。这是我的密码: import re import statistics file_name = raw_input("Enter file: ") file = open(file_name) revision_nums = [] for line in file: line = line.rstrip() x = re.findall("New Revision: (
New Revision: 39772
提取所有数字,然后找到平均值。这是我的密码:
import re
import statistics
file_name = raw_input("Enter file: ")
file = open(file_name)
revision_nums = []
for line in file:
line = line.rstrip()
x = re.findall("New Revision: (\d+)", line)
if len(x) > 0:
revision_nums.append(x)
print statistics.mean(revision_nums)
但是,我意识到修订版中的所有元素都存储为列表,当我尝试运行它时,会出现以下错误:
TypeError: can't convert type 'list' to numerator/denominator
我试过:
for i in revision_nums:
for j in i:
j = float(j)
它返回相同的错误。我做错了什么?我如何解决这个问题?
x
是列表,即使re.findall
只找到了一个匹配项。请尝试revision\u nums.append(x[0])
如果您的行总是以新修订开始:
您不需要正则表达式,可以使用str.startswith和str.rsplit:
file_name = raw_input("Enter file: ")
with open(file_name) as f:
revision_nums = []
for line in f:
if line.startswith("New Revision:"):
revision_nums.append(float(line.rsplit(None,1)[1]))
它可以成为一个列表comp:
with open(file_name) as f:
revision_nums = [float(line.rsplit(None,1)[1])for line in f
if line.startswith("New Revision:")]
将与
一起使用将自动关闭文件
如果必须使用re并且一行中可能有许多匹配项,请使用搜索和扩展,映射到浮点:
with open(file_name) as f:
revision_nums = []
r = re.compile("New Revision:\s+(\d+)")
for line in f:
revision_nums.extend(map(float,r.findall(line)))
x[0]是一个字符串,所以我使用了revision\u nums.append(float(x[0])