jak dodać wartość do krotki?


80

Pracuję nad skryptem, w którym mam listę takich krotek ('1','2','3','4'). na przykład:

list = [('1','2','3','4'),
        ('2','3','4','5'),
        ('3','4','5','6'),
        ('4','5','6','7')]

Teraz trzeba dodać '1234', '2345', '3456'i '4567'odpowiednio na końcu każdej krotki. na przykład:

list = [('1','2','3','4','1234'),
        ('2','3','4','5','2345'),
        ('3','4','5','6','3456'),
        ('4','5','6','7','4567')]

Czy jest to w jakikolwiek sposób możliwe?


8
rozwiązanie wielojęzyczne? ;)
— Snowbear

2
Witamy w StackOverflow! Po prawej stronie, gdy zadawałeś swoje pytanie, było to przydatne pudełko Jak sformatować . Warto przeczytać, podobnie jak strona, do której prowadzi link z [?] Tuż nad obszarem pytań.
— TJ Crowder,

3
Przynajmniej w Pythonie krotki są niezmienne. Jeśli chcesz „dodać coś do krotki”, dlaczego nie użyć zmiennej struktury danych od samego początku?
— Felix Kling

2
Ja też to robię - najczęściej z „plikiem”, ponieważ „dla pliku w plikach” jest cholernie naturalne! - ale generalnie powinieneś raczej unikać nazywania swoich list „listą”, która zastępuje wbudowaną „listę”.
— DSM

Odpowiedzi:


138

Krotki są niezmienne i nie powinny być zmieniane - do tego służy typ listy. Możesz zastąpić każdą krotkę przez originalTuple + (newElement,), tworząc w ten sposób nową krotkę. Na przykład:

t = (1,2,3)
t = t + (1,)
print t
(1,2,3,1)

Ale raczej sugerowałbym używanie list od początku, ponieważ są one szybsze do wstawiania elementów.

I jeszcze jedna wskazówka: nie nadpisuj wbudowanej nazwy listw swoim programie, raczej wywołaj zmienną llub jakąś inną nazwę. Jeśli nadpiszesz wbudowaną nazwę, nie możesz jej już używać w bieżącym zakresie.


23
Skrótt += 1,

1
Doskonałe punkty, jednak jestem w niefortunnej sytuacji, w której chcę iteracyjnie dodawać wartości do sqlite3bazy danych i muszę utworzyć krotkę wartości do dodania (ponieważ wymagana składnia to VALUES (v1, v2, v3, ...). W tym przypadku wiedza, jak dodawać wartości do krotka jest bardzo korzystna
— mgławica HS

16

Na podstawie składni domyślam się, że to Python. Celem krotki jest to, że jest ona niezmienna, więc musisz zastąpić każdy element nową krotką:

list = [l + (''.join(l),) for l in list]
# output:
[('1', '2', '3', '4', '1234'), 
 ('2', '3', '4', '5', '2345'), 
 ('3', '4', '5', '6', '3456'), 
 ('4', '5', '6', '7', '4567')]

5
To oczywiście działa. Ale czy naprawdę należy to zrobić? Zastanawiam się. Ponieważ to niweczy cel posiadania krotki na pierwszym miejscu. A może się mylę?
— user225312

9

W Pythonie nie możesz. Krotki są niezmienne.

Na liście zawierającej możesz jednak zastąpić krotkę ('1', '2', '3', '4')inną ('1', '2', '3', '4', '1234')krotką.


9

Jak wspomniano w innych odpowiedziach, po utworzeniu krotki są niezmienne, a lista może lepiej służyć Twoim celom.

To powiedziawszy, inną opcją tworzenia nowej krotki z dodatkowymi elementami jest użycie operatora splat:

new_tuple = (*old_tuple, 'new', 'items')

Podoba mi się ta składnia, ponieważ wygląda jak nowa krotka, więc jasno komunikuje, co próbujesz zrobić.

Korzystając ze splat, potencjalnym rozwiązaniem jest:

list = [(*i, ''.join(i)) for i in list]


7

Jak odpowiedzieli inni ludzie, krotki w Pythonie są niezmienne, a jedynym sposobem na ich „zmodyfikowanie” jest utworzenie nowej z dołączonymi elementami.

Ale najlepszym rozwiązaniem jest lista. Gdy trzeba wywołać jakąkolwiek funkcję lub metodę, która wymaga krotki, utwórz krotkę, używając krotki (listy).


4

Omówiłem kilka szczegółów związanych z tuplei listi zrozumiałem, że:

  • Krotki są Heterogeneoustypem danych kolekcji
  • Krotka ma stałą długość (na typ krotki)
  • Krotki są zawsze skończone

Aby dołączyć nowy element do krotki, należy go rzucić na niego listi wykonać append()na nim operacje, a następnie ponownie przesłać go z powrotem do krotki.

Ale osobiście, co czułem o pytanie, czy Krotki mają być skończone , stała długość przedmiotów, a jeśli używamy tych typów danych w naszych logiki aplikacji to nie powinno nie być scenariusz na dołączanie nowych elementów lub aktualizując wartość pozycji w to. Więc zamiast listy krotek powinna to być sama lista. Czy mam rację?


1
Istnieją scenariusze, w których musisz przekazać krotkę do funkcji, na przykład za pomocą SQL (psycopg2) lub interakcji z R (rpy2). Funkcje nie zawsze działają poprawnie, jeśli otrzymają listę zamiast krotki. Czasami otrzymujesz także krotkę z funkcji, a nie z listy. Krotki mogą chronić przed omyłkową modyfikacją oryginalnej listy, gdy zamiast tego powinieneś pracować nad kopią listy. Zatem tak, listy pośrednio lub bezpośrednio są pośrednikami w przedstawionych odpowiedziach. Jednak rzutowanie z powrotem do krotki na końcu jest nadal logiczne w wielu scenariuszach.
— Nate Wanner

2
    list_of_tuples = [('1', '2', '3', '4'),
                      ('2', '3', '4', '5'),
                      ('3', '4', '5', '6'),
                      ('4', '5', '6', '7')]


    def mod_tuples(list_of_tuples):
        for i in range(0, len(list_of_tuples)):
            addition = ''
            for x in list_of_tuples[i]:
                addition = addition + x
            list_of_tuples[i] = list_of_tuples[i] + (addition,)
        return list_of_tuples

    # check: 
    print mod_tuples(list_of_tuples)

0
OUTPUTS = []
for number in range(len(list_of_tuples))):
    tup_ = list_of_tuples[number]
    list_ = list(tup_)  
    item_ = list_[0] + list_[1] + list_[2] + list_[3]
    list_.append(item_)
    OUTPUTS.append(tuple(list_))

WYDAJNOŚĆ jest tym, czego pragniesz

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.