ここにクラスがあります:
class CoordinateRow(object):
def __init__(self):
self.coordinate_row = []
def add(self, input):
self.coordinate_row.append(input)
def weave(self, other):
result = CoordinateRow()
length = len(self.coordinate_row)
for i in range(min(length, len(other))):
result.add(self.coordinate_row[i])
result.add(other.coordinate_row[i])
return result
これは私のプログラムの一部です:
def verwerk_regel(regel):
cr = CoordinateRow()
coordinaten = regel.split()
for coordinaat in coordinaten:
verwerkt_coordinaat = verwerk_coordinaat(coordinaat)
cr.add(verwerkt_coordinaat)
cr2 = CoordinateRow()
cr12 = cr.weave(cr2)
print cr12
def verwerk_coordinaat(coordinaat):
coordinaat = coordinaat.split(",")
x = coordinaat[0]
y = coordinaat[1]
nieuw_coordinaat = Coordinate(x)
adjusted_x = nieuw_coordinaat.pas_x_aan()
return str(adjusted_x) + ',' + str(y)
しかし、「cr12 = cr.weave(cr2)」でエラーが発生します。
for i for range(min(length、len(other))):
TypeError:タイプ「CoordinateRow」のオブジェクトにlen()がありません
___len__
_メソッドを追加する必要があります。その後、len(self)
およびlen(other)
を使用できます。
_class CoordinateRow(object):
def __init__(self):
self.coordinate_row = []
def add(self, input):
self.coordinate_row.append(input)
def __len__(self):
return len(self.coordinate_row)
def weave(self, other):
result = CoordinateRow()
for i in range(min(len(self), len(other))):
result.add(self.coordinate_row[i])
result.add(other.coordinate_row[i])
return result
In [10]: c = CoordinateRow()
In [11]: c.coordinate_row += [1,2,3,4,5]
In [12]: otherc = CoordinateRow()
In [13]: otherc.coordinate_row += [4,5,6,7]
In [14]:c.weave(otherc).coordinate_row
[1, 4, 2, 5, 3, 6, 4, 7]
_
Len(何か)の範囲を反復することは、Pythonのアンチパターンです。コンテナ自体の内容を繰り返し処理する必要があります。
あなたの場合、リストを一緒に圧縮して、それを繰り返すことができます:
def weave(self, other):
result = CoordinateRow()
for a, b in Zip(self.coordinate_row, other.coordinate_row):
result.add(a)
result.add(b)
return result
other
はCoordinateRow型で、長さはありません。代わりにlen(other.coordinate_row)
を使用してください。これは、lengthプロパティを持つリストです。