如何解决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","7.50"],["13","5","12.50"],["15","tv_1","250.00",["16"],["17","20.00"],["18","150.00"],["19","3","200.00"],["20"],["21","300.00"]] "
我得到的输出:
[['10,1,SELL,toaster_1,10.00,20'],['12,8,BID,7.50'],['13,5,12.50'],['15,tv_1,250.00,['16'],['17,20.00'],['18,150.00'],['19,3,200.00'],['20'],['21,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','7.50'],['13','5','12.50'],['15','tv_1','250.00',['16'],['17','20.00'],['18','150.00'],['19','3','200.00'],['20'],['21','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
作为变量名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。