web-dev-qa-db-fra.com

Comment ajouter de la valeur à un tuple?

Je travaille sur un script où j'ai une liste de tuples comme ('1','2','3','4'). par exemple.:

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

Maintenant, je dois ajouter '1234', '2345', '3456' et '4567' respectivement à la fin de chaque tuple. par exemple:

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

Est-ce possible d'une quelconque manière?

70
Shahzad

Les tuples sont immuables et ne sont pas supposés être modifiés - c’est le type de liste. Vous pouvez remplacer chaque Tuple par originalTuple + (newElement,), créant ainsi un nouveau Tuple. Par exemple:

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

Mais je suggèrerais plutôt de commencer par les listes, car elles sont plus rapides pour insérer des éléments.

Et une autre astuce: N'écrasez pas le nom intégré list dans votre programme, appelez plutôt la variable l ou un autre nom. Si vous écrasez le nom intégré, vous ne pourrez plus l'utiliser dans la portée actuelle.

117
AndiDog

Sur la base de la syntaxe, je suppose que c'est Python. L'intérêt d'un tuple est qu'il est immuable, vous devez donc remplacer chaque élément par un nouveau tuple:

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')]
15
atp

En Python, vous ne pouvez pas. Les tuples sont immuables.

Sur la liste contenue, vous pouvez remplacer Tuple ('1', '2', '3', '4') Par un autre ('1', '2', '3', '4', '1234') Tuple.

8
Pablo Santa Cruz

Comme d'autres personnes ont répondu, les n-uplets dans python sont immuables et le seul moyen de "modifier" celui-ci est de créer un nouveau avec les éléments ajoutés.

Mais la meilleure solution est une liste. Lorsque la fonction ou la méthode nécessitant un tuple doit être appelée, créez un tuple à l'aide de Tuple (liste).

7
Ryan

Comme mentionné dans d'autres réponses, les n-uplets sont immuables une fois créés, et une liste pourrait mieux servir vos objectifs.

Cela dit, une autre option pour créer un nouveau tuple avec des éléments supplémentaires consiste à utiliser l'opérateur splat:

new_Tuple = (*old_Tuple, 'new', 'items')

J'aime cette syntaxe car ressemble à un nouveau tuple, elle communique donc clairement ce que vous essayez de faire.

En utilisant splat, une solution potentielle est:

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

6
Terrabits

Je passais en revue certains détails liés à Tuple et list, et ce que j'ai compris est le suivant:

  • Les tuples sont Heterogeneous type de données de collection
  • Le tuple a longueur fixe (par type de tuple)
  • Les nuplets sont Toujours finis

Donc, pour ajouter un nouvel élément à un tuple, vous devez le convertir en list et faire append() sur puis remettez-le à Tuple.

Mais personnellement, ce que j’ai ressenti à propos de la question est que si les tuples sont supposés être finis , éléments de longueur fixe et si nous utilisons ces types de données dans notre logique d'application, il ne devrait pas est un scénario permettant d’ajouter de nouveaux éléments OR mettant à jour une valeur d’élément. Ainsi, au lieu de , une liste de tuples il devrait être la liste de la liste elle-même, est-ce que j'ai raison sur ce point?

4
Dipak
    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)
2
Viktor
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_))

SORTIES est ce que vous désirez

0
Questwalker