Sahip olduğum veri kümesini düzenlemek için Python'daki 3B nesne listesini kullanıyorum. Nesne öğelerinin tamamen benzersiz olmadığını fark ediyorum, yani dizinin bir nesnesindeki değişkenler başkaları tarafından güncelleniyor. Sorunumu gösteren minimal bir çalışma örneği aşağıda gösterilmiştir.Python2.7: Nesnelerin 3D listesinin benzersiz olduğundan emin olun
class myClass:
def __init__(self,ListA=[],ListB=[],ListCount=0):
self.ListA = ListA
self.ListB = ListB
self.ListCount = ListCount
def add_data(self,ElementA,ElementB):
self.ListA.append(ElementA)
self.ListB.append(ElementB)
self.ListCount = self.ListCount + 1
def check_data(self):
if(len(self.ListA) != self.ListCount):
print("Error: Unaccounted for Data in Object!")
print("Object has %d elements. Thinks it has %d"%(len(self.ListA),self.ListCount))
Bu sınıf tanımını kullanan python kodu böyle bir şeyle gider.
import random
ObjectArray = [[[myClass() for k in range(4)] for j in range(3)] for i in range(2)]
#Print addresses of object array
print("Addresses of the individual object elements in the 3D list ")
for i in range(0,2):
for j in range(0,3):
for k in range(0,4):
print(ObjectArray[i][j][k])
#Loop over object array and fill each object with some data
for i in range(0,2):
for j in range(0,3):
for k in range(0,4):
NumData = int(10*random.random())
for m in range(0,NumData):
#Generate some junk data to insert into the list of this object
ListAData = int(10*random.random())
ListBData = int(10*random.random())
ObjectArray[i][j][k].check_data()
ObjectArray[i][j][k].add_data(ListAData,ListBData)
ObjectArray[i][j][k].check_data()
Neyi özledim? Python 2.7'deki 3B nesne listesini kullanmak mümkün mü? Listedeki her bir nesne, yazdırdığımda benzersiz bir bellek adresine sahip gibi görünüyor. Herhangi bir anlayış büyük ölçüde takdir edilecektir.
bu koddan çıkış örneği geçerli:
Addresses of the individual object elements in the 3D list
<__main__.myClass instance at 0x7fc59ad4ef80> <__main__.myClass
instance at 0x7fc59ad635a8> <__main__.myClass instance at
0x7fc59ad63248> <__main__.myClass instance at 0x7fc59ad63440>
<__main__.myClass instance at 0x7fc59ad6d320> <__main__.myClass
instance at 0x7fc59ad6d368> <__main__.myClass instance at
0x7fc59ad6d3b0> <__main__.myClass instance at 0x7fc59ad6d3f8>
<__main__.myClass instance at 0x7fc59ad6d488> <__main__.myClass
instance at 0x7fc59ad6d4d0> <__main__.myClass instance at
0x7fc59ad6d518> <__main__.myClass instance at 0x7fc59ad6d560>
<__main__.myClass instance at 0x7fc59ad6d638> <__main__.myClass
instance at 0x7fc59ad6d680> <__main__.myClass instance at
0x7fc59ad6d6c8> <__main__.myClass instance at 0x7fc59ad6d710>
<__main__.myClass instance at 0x7fc59ad6d7a0> <__main__.myClass
instance at 0x7fc59ad6d7e8> <__main__.myClass instance at
0x7fc59ad6d830> <__main__.myClass instance at 0x7fc59ad6d878>
<__main__.myClass instance at 0x7fc59ad6d908> <__main__.myClass
instance at 0x7fc59ad6d950> <__main__.myClass instance at
0x7fc59ad6d998> <__main__.myClass instance at 0x7fc59ad6d9e0>
Error: Unaccounted for Data in Object! Object has 4 elements. Thinks it has 0
Error: Unaccounted for Data in Object! Object has 5 elements. Thinks it has 1
Error: Unaccounted for Data in Object! Object has 5 elements. Thinks it has 1
Error: Unaccounted for Data in Object! Object has 6 elements. Thinks it has 2
Error: Unaccounted for Data in Object! Object has 6 elements. Thinks it has 2
Error: Unaccounted for Data in Object! Object has 7 elements. Thinks it has 3
Error: Unaccounted for Data in Object! Object has 7 elements. Thinks it has 3
için varsayılan noktayı işaret ederler, bunlar myClass'ın benzersiz örnekleridir, ancak yazdırmayı yazdırırsanız (id (ObjectArray [i ] [j] [k] .ListA)) 'hepsinin aynı listeye sahip olduğunu görmelisiniz ...." python'da varsayılan değişken argümanları "araması –