我为这个问题的复杂性道歉,但对我来说,对Python来说这是一个巨大的挑战:
我有一个存储文本行的外部文件:input.txt
min: 1,2,3,5,6
max: 1,2,3,5,6
avg: 1,2,3,5,6
我将这个文件的内容读入一个名为input_data
的新变量中的各种列表中,如下所示:
input_data = []
with open('input.txt') as inputfile:
for line in inputfile:
input_data.append(line.strip().split(','))
input_data
的结果如下:
[['min: 1', '2', '3', '5', '6'], ['max: 1', '2', '3', '5', '6'], ['avg: 1', '2', '3', '5', '6']]
所以我有一个变量,其中存储了3个列表。
如何在'min','max'和'avg'之后删除“:”?
我试过了:
input_data = input_data.replace(":",",")
另外,如何将min
,max
和avg
保留为字符串,但将列表中的数字更改为整数?例如
['min', 1, 2, 3, 5, 6]
'min'字符串和所有数字整数
答案 0 :(得分:2)
只需在冒号上拆分,然后在分割逗号后将其余部分映射到int:
with open("in.txt") as f:
for line in f:
a, rest = line.split(":",1)
print([a] + map(int,rest.split(",")))
输出:
['min', 1, 2, 3, 5, 6]
['max', 1, 2, 3, 5, 6]
['avg', 1, 2, 3, 5, 6]
答案 1 :(得分:1)
input_data = []
with open('input.txt') as inputfile:
for line in inputfile:
row = []
sections = line.strip().split(':') # First split out the title
kind = sections[0]
row.append(kind)
data = sections[1].split(',')
for entry in data:
row.append(int(entry)) # Use int to convert to integer
input_data.append(row)
试试吧。首先,我只使用冒号:
拆分该行。第一部分是标题('min','max'和'avg'),我将其添加到输出数据的新“行”中。
然后我将第二部分(数字)与您完全相同。然后我使用built in function int将字符串数转换为实际的整数值。
我使代码非常明确,所以你应该能够理解每一行!
如果你真的想要列表理解,我上面代码的(非常难看的)直接翻译如下:
with open('input.txt') as f:
result = [[line.split(':')[0]] + [int(x) for x in line.split(':')[1].split(',')] for line in f]
答案 2 :(得分:1)
首先,我建议将其分开。要保持单词和第一个值分开,请将空格转换为逗号,以便正确分割。在这种情况下,您可以将“:”转换为逗号,这样它就会自动删除冒号。
input_data = line.strip().replace(': ', ',').split(',')
然后将所有必要的值转换为整数,你可以用很多方法来做,但这里有两个例子:
input_data = [input_data[0]] + [int(i) for i in input_data[1:]]
input_data = [int(i) for i if i.isdigit() else i for i in input_data]
或者,如果你在开始时没有做到这一点并仍然有一个冒号,那么你可以通过调整上述方法之一来摆脱它:
input_data = [int(i) for i if i.isdigit() else i.replace(':', '') for i in input_data]
最后,这应该适用于您的代码:
input_data = []
with open('input.txt') as inputfile:
for line in inputfile:
input_data.append([int(i) for i if i.isdigit() else i for i in line.strip().split(',')])
或者如果需要,稍微缩短版本:
with open('input.txt') as inputfile:
input_data = [[int(i) for i if i.isdigit() else i for i in line.strip().split(',')] for line in inputfile]
Symmitchry的回答可能有点好一点,但把它分成两秒并没有让我想到。