您可以使用一个dict计数器(在这种情况下,它也可以是一个列表)。defaultdict很方便:
from collections import defaultdict
returns = defaultdict(int)
count = 0
for p in lasfile.File(inFile, None, 'r'):
count += 1
returns[p.return_number] += 1
编辑:我不确定 DSM 是否发布了带有Counter示例的单独答案,所以我将在这里回复 OP 的问题:
@DSM:我可以结合计数器吗?例如:如果我想同时计算 p.return_number 和 p.scan_angle – Gianni
Counter将计算你给它的迭代中的值。迭代应该是同质的。例如,如果scan_angles 可以采用 、 等值1,2那么您不能Counter对两者都使用相同的值并获得正确的结果。如果这些值不重叠,您可以获得正确的结果,但您的代码将令人困惑且难以理解。我建议使用两个Counter's:一个用于return_numbers,一个用于scan_angle's。您可以使用相同的循环轻松地填充两者(并且相同的代表defaultdict's),但如果您想将创建和填充两个Counter's 压缩到一个语句中,您将需要类似
from collections import Counter
rnc, sac = map(Counter,
zip(*((p.return_number, p.scan_angle) for p in lasfile.File(inFile,None,'r'))))
请注意,至少在 Python 2 上它会生成一个列表,因此所有数据将在某个时间点同时保存在内存中。
然而,更简单的方法是:
使用两个defaultdicts:
returns, angles = defaultdict(int), defaultdict(int)
for p in lasfile.File(inFile, None, 'r'):
returns[p.return_number] += 1
angles[p.scan_angle] += 1
count += 1
Counter或在文件的两个不同读取中填充两个s:
fp = lasfile.File(inFile, None, 'r')
returns = Counter(p.return_number for p in fp)
fp = lasfile.File(inFile, None, 'r')
angles = Counter(p.scan_angle for p in fp)