我必须遍历给定的文件,其中包含混杂的字母,并取出混杂的整数并将它们附加到新列表中。
我有大部分代码可以运行,但是我看不到我的错误。
我尝试将文件中的行拆分为单独的字符串,然后遍历它们以将其追加到大列表中。我曾尝试使用“ for each”循环,“ for”循环和split函数。
这是我事先调用的函数。
此函数接受一个字符串,然后解析该字符串,返回数字列表:
输入:
'800!)176^b006$(46$*#63Z*16$*06$z5^'
输出:
[800, 600, 64, 63, 61, 60]
代码:
lst_num = []
cur_num = ""
for char in s:
if char.isdigit():
cur_num += char
elif char == '$' and cur_num:
lst_num.append(int(cur_num[::-1]))
cur_num = ""
elif char == '^':
cur_num = ""
elif not char.isdigit() and cur_num:
lst_num.append(int(cur_num))
cur_num = ""
if cur_num:
lst_num.append(int(cur_num))
return lst_num
这将获取一个输入文本文件,然后遍历每一行,解析出数字,然后将其添加到单个列表中
输入:
'800!)176^b006$(46$*#63Z*16$*06$z5^
47$ 42^ 18$bj55,
166^!56'
预期输出:
[800, 600, 64, 63, 61, 60, 74, 81, 55, 56]
代码:
def parse_file(filename):
big_nums = []
with open(filename, 'r') as f:
for line in f:
chars = line.split(',')
for char in chars:
combine = parse_line(char)
big_nums.append(combine)
实际输出:
[[800, 600, 64, 63, 61, 60], [74, 81, 55], [56]]
答案 0 :(得分:2)
chars
是一个列表,因此range(chars)
无效。您可能是说range(len(chars))
,但直接遍历chars
会更容易:
for char in chars:
big_nums.append(char)
或改用list.extend
:
big_nums.extend(chars)
但是请注意,这仍然无法提供预期的输出,因为它返回的是字符串列表,而不是整数。
答案 1 :(得分:0)
line.split()
(不带参数)仅在空格处分割。您仍然需要删除多余的逗号和右括号。此外,您需要将结果字符串转换为数字。 range(chars)
不起作用,因为range
期望一个或多个数字作为其参数。