假设我有一个二维列表
[[00000.ppm,11],[00001.ppm,40],[00001.ppm,38],[00001.ppm,13],00002.ppm,39],[00003.ppm,4]]
我需要从列表的第二个维度中选择列表中的每个值,其中file =“ anything.ppm”
因此,当我搜索00001.ppm时,将获得值“ 40”,“ 38”,“ 13”作为输出
我也需要将这些值分开,以便我可以比较它们,例如
_class=13
if (value==_class): do something
我在想是否还有其他方法,而不仅仅是遍历整个列表的代价高昂,因为事实上,文件是有序的,它们的名称始终是int增量。
我只是不知道每个文件有多少个。
为此,将.csv文件读取到列表中可能不是一个好主意。
.csv格式
00000.ppm,11
00001.ppm,40
00001.ppm,38
00001.ppm,13
00002.ppm,39
00003.ppm,4
我在想是否还有其他方法,而不仅仅是遍历整个列表的代价高昂,因为事实上,文件是有序的,它们的名称始终是int增量。
您可以利用文件对象是可迭代的这一事实,而不用将整个数据集读取到列表中并进行遍历,并在从00001过渡到00002时停止从中读取数据。
def read_partial(file, key='00001.ppm'):
with open('obj.csv') as f:
found = False
for line in f:
if line.startswith(key):
yield int(line.split(',')[-1].strip())
found = True
else:
if found:
break
>>> list(read_partial('obj.csv'))
[40, 38, 13]
同样,这假定0000x.ppm字段按照您的问题进行排序。
obj.csv:
00000.ppm,11
00001.ppm,40
00001.ppm,38
00001.ppm,13
00002.ppm,39
00003.ppm,4
如果您确实想遍历列表,可以使用[b for a, b in mylist if a == '00001.ppm']
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句