Python:我无法访问子列表中的单个元素.整个子列表显示为单个元素



我的代码:

import ast
with open('input.txt', 'r') as file :
filedata = file.read()
filedata = filedata.replace('|', ',')
out = []
buff = []
for c in filedata :
if c == 'n':
out.append(''.join(buff))
buff = []
else:
buff.append(c)
else:
if buff:
out.append(''.join(buff))
list = [[i] for i in out]
print(list)

输入:

10|1|SELL|toaster_1|10.00|20  12|8|BID|toaster_1|7.50 
13|5|BID|toaster_1|12.50  15|8|SELL|tv_1|250.00|20  16
17|8|BID|toaster_1|20.00  18|1|BID|tv_1|150.00  19|3|BID|tv_1|200.00 
20 21|3|BID|tv_1|300.00 

预期输出

[["10","1","SELL","toaster_1","10.00","20"],
["12","8","BID","toaster_1","7.50"], 
["13","5","BID","toaster_1","12.50"],
["15","8","SELL","tv_1","250.00","20"],  ["16"], 
["17","8","BID","toaster_1","20.00"], 
["18","1","BID","tv_1","150.00"],  ["19","3","BID","tv_1","200.00"], 
["20"], ["21","3","BID","tv_1","300.00"]] "

我得到的输出:

[['10,1,SELL,toaster_1,10.00,20'],
['12,8,BID,toaster_1,7.50'], ['13,5,BID,toaster_1,12.50'],
['15,8,SELL,tv_1,250.00,20'], ['16'], ['17,8,BID,toaster_1,20.00'],
['18,1,BID,tv_1,150.00'], ['19,3,BID,tv_1,200.00'], ['20'],
['21,3,BID,tv_1,300.00']] [Finished in 0.1s]

我想访问子列表中的各个元素,例如,SELL,或烤面包机,但我无法访问它们。有人能给我建议吗?

使用:

# filedata = file.read()
filedata = """10|1|SELL|toaster_1|10.00|20  12|8|BID|toaster_1|7.50 
13|5|BID|toaster_1|12.50  15|8|SELL|tv_1|250.00|20  16
17|8|BID|toaster_1|20.00  18|1|BID|tv_1|150.00  19|3|BID|tv_1|200.00 
20 21|3|BID|tv_1|300.00 """

result = []
for i in filedata.split():        #split by space
result.append(i.split("|"))   #split by `|` and append to result
print(result)

或列表理解

例如:

result = [i.split("|") for i in filedata.split()]

输出:

[['10', '1', 'SELL', 'toaster_1', '10.00', '20'],
['12', '8', 'BID', 'toaster_1', '7.50'],
['13', '5', 'BID', 'toaster_1', '12.50'],
['15', '8', 'SELL', 'tv_1', '250.00', '20'],
['16'],
['17', '8', 'BID', 'toaster_1', '20.00'],
['18', '1', 'BID', 'tv_1', '150.00'],
['19', '3', 'BID', 'tv_1', '200.00'],
['20'],
['21', '3', 'BID', 'tv_1', '300.00']]

您的代码从不处理将行拆分为逗号分隔的值。您只需逐个字符地读取行,将所有这些字符连接到一个字符串中,然后将其附加到out列表中。

以下代码应该可以工作(我对您自己的代码进行了最低限度的更改。我会使用一个更干净的解决方案,比如Rakesh的解决方案(:

import ast
with open('input.txt', 'r') as file :
filedata = file.read()
filedata = filedata.replace('|', ',')
out = []
buff = []
for c in filedata :
if c == 'n':
line = ''.join(buff)
for word in line.split(","):
out.append(word)
buff = []
else:
buff.append(c)
else:
if buff:
out.append(''.join(buff))
# l = [[i] for i in out]
print(out)

顺便说一下,建议不要将list用作变量名。

最新更新