Zawartość pliku tekstowego 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
0
Steven Briggs 19 listopad 2019, 21:49
test.append(items[0:]) tworzy dwuwymiarową listę. Czy tego chcesz?
 – 
Barmar
19 listopad 2019, 21:53
Nie, ale nie jestem pewien, jak inaczej przenieść literę z pliku tekstowego do Węzła 1-18 z dołączeniem go najpierw do innej listy.
 – 
Steven Briggs
19 listopad 2019, 21:55
Czy możesz nam pokazać, co zawiera plik tekstowy i co powinien zawierać wynikowe węzły? Podejrzewam, że chcesz po prostu użyć items[0] zamiast items[0:], ale nie jest to jasne.
 – 
Barmar
19 listopad 2019, 21:56
Dlaczego w pierwszej kolejności korzystałeś z [0:]? To tworzy kopię listy, ale nie ma potrzeby tworzenia kopii, ponieważ nie używasz tej listy nigdzie indziej.
 – 
Barmar
19 listopad 2019, 21:57
Nie rozumiem o co pytasz
 – 
juanpa.arrivillaga
19 listopad 2019, 21:59

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:

  1. Po prostu usuń dwukropek w ten sposób:

    test.append(items[0])

    To sprawi, że test będzie listą liter, a nie listą list.

  2. Jeśli z jakiegoś powodu chcesz zachować plasterki, użyj pierwszego elementu każdej listy w test, aby zainicjować swoje obiekty Node w następujący sposób:

    Węzeł1 = Węzeł(test[0][0])

1
Lev M. 19 listopad 2019, 22:05

Problem polegał na niezrozumieniu [0:] usunięcia: naprawiono problem.

0
Steven Briggs 19 listopad 2019, 22:00