Próbuję wypełnić różne węzły pojedynczymi literami, czytając je z tekstu, co działa, ale nie tak, jak miałem nadzieję. Kiedy próbuję wywołać funkcję atrybutu Node, aby uzyskać zawartość, otrzymuję ['H'] zamiast samego H, co uniemożliwia porównanie w innej części programu. Czy istnieje sposób na usunięcie nawiasów i po prostu wpisanie pojedynczej litery w zawartość każdego z moich węzłów?
def createLattice():
test = []
with open("lattice.txt", 'r') as f:
for line in f:
items = line.split()
test.append(items[0:])
Node1 = Node(test[0])
Node2 = Node(test[1])
Node3 = Node(test[2])
Node4 = Node(test[3])
Node5 = Node(test[4])
Node6 = Node(test[5])
Node7 = Node(test[6])
Node8 = Node(test[7])
Node9 = Node(test[8])
Node10 = Node(test[9])
Node11 = Node(test[10])
Node12 = Node(test[11])
Node13 = Node(test[12])
Node14 = Node(test[13])
Node15 = Node(test[14])
Node16 = Node(test[15])
Node17 = Node(test[16])
Node18 = Node(test[17])
lattice = {Node1: [Node2, Node6, Node7],
Node2: [Node1, Node3, Node5, Node8],
Node3: [Node2, Node4, Node9],
Node4: [Node3, Node5, Node10],
Node5: [Node2, Node4, Node6, Node11],
Node6: [Node5, Node1, Node12],
Node7: [Node1, Node8, Node12, Node13],
Node8: [Node2, Node7, Node9, Node12, Node14],
Node9: [Node3, Node8, Node10, Node15],
Node10: [Node4, Node9, Node11, Node16],
Node11: [Node5, Node8, Node10, Node12, Node17],
Node12: [Node6, Node7, Node11, Node18],
Node13: [Node7, Node14, Node18],
Node14: [Node8, Node13, Node15, Node17],
Node15: [Node9, Node14, Node16],
Node16: [Node10, Node15, Node17],
Node17: [Node11, Node14, Node16, Node18],
Node18: [Node12, Node13, Node17]}
return lattice
2 odpowiedzi
Twoja zmienna test
jest listą list zamiast liter.
W tej linii:
test.append(items[0:])
Tworzysz „kawałek” elementów, która jest listą, i wstaw ją do test
.
Zauważ, że append
nie łączy list, dodaje tylko nowy element na końcu listy (nawet jeśli ten element sam jest listą).
Istnieją 2 sposoby rozwiązania problemu:
Po prostu usuń dwukropek w ten sposób:
test.append(items[0])
To sprawi, że
test
będzie listą liter, a nie listą list.Jeśli z jakiegoś powodu chcesz zachować plasterki, użyj pierwszego elementu każdej listy w
test
, aby zainicjować swoje obiektyNode
w następujący sposób:Węzeł1 = Węzeł(test[0][0])
Problem polegał na niezrozumieniu [0:] usunięcia: naprawiono problem.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
test.append(items[0:])
tworzy dwuwymiarową listę. Czy tego chcesz?items[0]
zamiastitems[0:]
, ale nie jest to jasne.[0:]
? To tworzy kopię listy, ale nie ma potrzeby tworzenia kopii, ponieważ nie używasz tej listy nigdzie indziej.