将子列表附加到 python 中的另一个列表
Appending a sublist to another list in python
with open('LBP_for_paper.csv','r') as csvDataFile:
datarows = csv.reader(csvDataFile, delimiter=',', quotechar='|')
nofinding=[]
rawrow=[]
for row in datarows:
if row[1]=='No Finding' and row[2]=='1':
rawrow = list((row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]))
nofinding.append(rawrow)
print(nofinding[:2])
我正在从 csv 文件中读取数据行,并希望基于某些列创建自定义的嵌套列表。我想要
list((row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]))
应该return一个像
这样的列表
['00030805_000.png,No Finding,1,34777,69373']
它存储在 rawrow 中,然后附加到更大的列表,即 nofinding,但我得到的输出为
[['0', '0', '0', '3', '0', '8', '0', '5', '', '0', '0', '0', '.',
'p', 'n', 'g', ',', 'N', 'o', ' ', 'F', 'i', 'n', 'd', 'i', 'n', 'g',
',', '1', ',', '3', '4', '7', '7', '7', ',', '6', '9', '3', '7', '3'],
['0', '0', '0', '3', '0', '8', '0', '4', '', '0', '0', '0', '.', 'p',
'n', 'g', ',', 'N', 'o', ' ', 'F', 'i', 'n', 'd', 'i', 'n', 'g', ',',
'1', ',', '3', '5', '4', '0', '5', ',', '6', '3', '0', '8', '8']]
期望输出
[ ['00030805_000.png,No Finding,1,34777,69373'], ['00030804_000.png,No
Finding,1,35405,63088'] ]
谢谢
您的问题是 rawrow = list((row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]))
正在将字符串转换为字符列表
如果您想将其保留为逗号分隔的字符串,请将该行替换为以下内容:
rawrow = row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]
或更干净:
rawrow = ",".join([row[row_index] for row_index in [0, 1, 2, 17, 18]])
我很好奇你为什么要:
[ ['00030805_000.png,No Finding,1,34777,69373'], ['00030804_000.png,No Finding,1,35405,63088'] ]
而不是这个:
[ ['00030805_000.png','No Finding',1,34777,69373], ['00030804_000.png','No Finding',1,35405,63088] ]
您可以通过以下方式实现:
rawrow = []
for row_index in [0, 1, 2, 17, 18]:
rawrow.append(row[row_index].split(","))
或一行:
rawrow = [row[row_index].split(",") for row_index in [0, 1, 2, 17, 18]]
此外,您的整个代码可以合并如下:
with open('LBP_for_paper.csv','r') as csvDataFile:
datarows = csv.reader(csvDataFile, delimiter=',', quotechar='|')
nofinding = [",".join([row[row_index] for row_index in [0, 1, 2, 17, 18]]) for row in datarows if row[1]=='No Finding' and row[2]=='1']
print(nofinding[:2])
with open('LBP_for_paper.csv','r') as csvDataFile:
datarows = csv.reader(csvDataFile, delimiter=',', quotechar='|')
rawrow = []
nofindings=[]
for row in datarows:
if row[1]=='No Finding' and row[2]=='1':
rawrow = [''.join(row[row_index]) for row_index in [0, 1, 2, 17, 18] ]
nofindings.append(rawrow)
print(nofindings[:3])
解决了我的问题。
with open('LBP_for_paper.csv','r') as csvDataFile:
datarows = csv.reader(csvDataFile, delimiter=',', quotechar='|')
nofinding=[]
rawrow=[]
for row in datarows:
if row[1]=='No Finding' and row[2]=='1':
rawrow = list((row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]))
nofinding.append(rawrow)
print(nofinding[:2])
我正在从 csv 文件中读取数据行,并希望基于某些列创建自定义的嵌套列表。我想要
list((row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]))
应该return一个像
这样的列表['00030805_000.png,No Finding,1,34777,69373']
它存储在 rawrow 中,然后附加到更大的列表,即 nofinding,但我得到的输出为
[['0', '0', '0', '3', '0', '8', '0', '5', '', '0', '0', '0', '.', 'p', 'n', 'g', ',', 'N', 'o', ' ', 'F', 'i', 'n', 'd', 'i', 'n', 'g', ',', '1', ',', '3', '4', '7', '7', '7', ',', '6', '9', '3', '7', '3'], ['0', '0', '0', '3', '0', '8', '0', '4', '', '0', '0', '0', '.', 'p', 'n', 'g', ',', 'N', 'o', ' ', 'F', 'i', 'n', 'd', 'i', 'n', 'g', ',', '1', ',', '3', '5', '4', '0', '5', ',', '6', '3', '0', '8', '8']]
期望输出
[ ['00030805_000.png,No Finding,1,34777,69373'], ['00030804_000.png,No Finding,1,35405,63088'] ]
谢谢
您的问题是 rawrow = list((row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]))
正在将字符串转换为字符列表
如果您想将其保留为逗号分隔的字符串,请将该行替换为以下内容:
rawrow = row[0]+","+row[1]+","+row[2]+","+row[17]+","+row[18]
或更干净:
rawrow = ",".join([row[row_index] for row_index in [0, 1, 2, 17, 18]])
我很好奇你为什么要:
[ ['00030805_000.png,No Finding,1,34777,69373'], ['00030804_000.png,No Finding,1,35405,63088'] ]
而不是这个:
[ ['00030805_000.png','No Finding',1,34777,69373], ['00030804_000.png','No Finding',1,35405,63088] ]
您可以通过以下方式实现:
rawrow = []
for row_index in [0, 1, 2, 17, 18]:
rawrow.append(row[row_index].split(","))
或一行:
rawrow = [row[row_index].split(",") for row_index in [0, 1, 2, 17, 18]]
此外,您的整个代码可以合并如下:
with open('LBP_for_paper.csv','r') as csvDataFile:
datarows = csv.reader(csvDataFile, delimiter=',', quotechar='|')
nofinding = [",".join([row[row_index] for row_index in [0, 1, 2, 17, 18]]) for row in datarows if row[1]=='No Finding' and row[2]=='1']
print(nofinding[:2])
with open('LBP_for_paper.csv','r') as csvDataFile:
datarows = csv.reader(csvDataFile, delimiter=',', quotechar='|')
rawrow = []
nofindings=[]
for row in datarows:
if row[1]=='No Finding' and row[2]=='1':
rawrow = [''.join(row[row_index]) for row_index in [0, 1, 2, 17, 18] ]
nofindings.append(rawrow)
print(nofindings[:3])
解决了我的问题。