のカウンターを使用でき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
あなたがそれを与える反復可能な値を数えます。iterableはホモジェニックであると想定されています。たとえば、 sが、などscan_angle
の値をとることができる場合、両方に同じ値を使用して正しい結果を得ることができません。値が重ならない場合、正しい結果を得ることができますが、コードは混乱し、理解しにくくなります。2つの'を使用することをお勧めします。1つはs用、もう1つは's用です。同じループを使用して両方を簡単に入力できます(同じは'を表します)が、2つの'の作成と入力を1つのステートメントに圧縮する場合は、次のようなものが必要になります。1
2
Counter
Counter
return_number
scan_angle
defaultdict
Counter
from collections import Counter
rnc, sac = map(Counter,
zip(*((p.return_number, p.scan_angle) for p in lasfile.File(inFile,None,'r'))))
少なくともPython2ではリストが生成されるため、ある時点ですべてのデータが一度にメモリに保持されることに注意してください。
それでも、はるかに簡単な方法は次のとおりです。
2つのを使用しますdefaultdict
:
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
、ファイルの2つの異なる読み取りに2つ入力します。
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)