Додайте змінні до кортежу


282

Я вивчаю Python і створюю підключення до бази даних. Намагаючись додати до БД, я думаю створити кортежі з інформації, а потім додати їх до БД.

Що я роблю : я беру інформацію від користувача і зберігаю її у змінних. Чи можу я додати ці змінні в кортеж? Чи можете ви мені допомогти з синтаксисом?

Також, якщо існує ефективний спосіб зробити це, будь ласка, поділіться ...

EDIT Дозвольте мені трохи відредагувати це питання ... Мені потрібен лише кортеж для введення інформації в БД. Як тільки інформація буде додана до БД, чи слід видалити кортеж? Я маю на увазі, що кортеж мені вже не потрібен.

Відповіді:


371

Кортежі незмінні; ви не можете змінити, які змінні вони містять після побудови. Однак їх можна об'єднати або нарізати, щоб утворилися нові кортежі:

a = (1, 2, 3)
b = a + (4, 5, 6)  # (1, 2, 3, 4, 5, 6)
c = b[1:]  # (2, 3, 4, 5, 6)

І, звичайно, будувати їх із існуючих значень:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)

Мені потрібні лише ці кортежі для додавання в db після введення користувача. тому я повинен знищити ці кортежі після завершення оновлення до db?
amit

5
Не потрібно руйнувати кортежі після оновлення db. Якщо вони виходять за межі, їх слід збирати сміття.
Джастін Стандарт

Щоб додати рядок до кортежу, не порушуючи сам рядок, перевірте stackoverflow.com/a/16449189
Enzo Ferey

Просто додавання a = (), і b= a + (5), приводить до b = 5, отже, b= a + (5,)призведе до b = (5,); кортеж.
yashgarg1232

222

Почати можна з пустого кортежу з чимось подібним t = (). Можна додати за допомогою +, але потрібно додати ще один кортеж. Якщо ви хочете додати один елемент, зробити його одноплідних: t = t + (element,). Ви можете додати кортеж з декількох елементів із цією кінцевою комою або без неї.

>>> t = ()
>>> t = t + (1,)
>>> t
(1,)
>>> t = t + (2,)
>>> t
(1, 2)
>>> t = t + (3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t = t + (6, 7, 8,)
>>> t
(1, 2, 3, 4, 5, 6, 7, 8)

20
У цьому прикладі можна також зробити так: t = ()тодіt += (1,)
Дуглас Денхартог

2
Яка користь у тому, щоб включити коду?
Сплеск

13
Кома в кінці потрібна синглетону, щоб уникнути плутанини між елементами в дужках. Прості дужки використовуються в порядку операцій, тому (7) - це просто 7. Але (7,) - це одноелементний кортеж, де елемент 7. Так само, 3 * (7 + 8) = 45, але 3 * ( 7 + 8,) = (15, 15, 15) - це має сенс?
Даніель

2
Що стосується мультиелементних кортежів, то кома в кінці 100% необов’язкова. У тому числі це означає, що "це кортеж, я знаю, що це кортеж, я знаю, як працюють кортежі, і я знаю, що можу це зробити". Але жодна кома може здатися більш природною. Ідк. До вас.
Даніель

Я думаю, що важливо відзначити, що кортежі незмінні - насправді вони не можуть бути змінені. Це рішення - створити новий кортеж на основі двох існуючих кортежів.
That1Guy

44

Ще одна тактика, яка ще не згадується, - це додавання до списку, а потім перетворення списку в кортеж у кінці:

mylist = []
for x in range(5):
    mylist.append(x)
mytuple = tuple(mylist)
print mytuple

повертає

(0, 1, 2, 3, 4)

Я інколи використовую це, коли мені доводиться передавати кортеж як аргумент функції, що часто необхідно для функцій numpy.


3
Корисно знати, що зворотне значення цього, тобто list(someTuple)працює теж. Два типи об'єктів, очевидно, взаємозамінні
хаверім

Не дуже взаємозамінна, я думаю, що перетворення з кортежу в список скопіює всі елементи в списку, тому напевно є місце, щоб цього уникнути
gbtimmon

41

У Python 3 ви можете використовувати *для створення нового кордону елементів з оригінального кортежу разом з новим елементом.

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')

2
Це на сьогоднішній день для мене найбільш пітонічне.
Бумсик Кім

6
Це в 10 разів повільніше, ніж tuple1 + ("baz",).
Матін Ульхак

9

"Після того, як інформація буде додана до БД, я повинен видалити кортеж? Я маю на увазі, що кортеж мені більше не потрібен."

Немає.

Як правило, нічого не потрібно видаляти. Існують деякі особливі випадки видалення, але вони дуже і дуже рідкісні.

Просто визначте вузьку область (тобто визначення функції або функцію методу в класі), і об'єкти будуть збирати сміття в кінці області.

Не хвилюйтеся про те, щоб видалити що-небудь.

[Примітка. Я працював з хлопцем, який - окрім спроби видалити об’єкти - завжди писав методи "скидання", щоб очистити їх. Наче він збирався їх врятувати і повторно використовувати. Також нерозумний задум. Просто ігноруйте об'єкти, які ви більше не використовуєте. Якщо ви визначаєте свої функції в досить малих блоках коду, вам більше нічого не варто думати.]


7

Це так само просто, як і наступне:

info_1 = "one piece of info"
info_2 = "another piece"
vars = (info_1, info_2)
# 'vars' is now a tuple with the values ("info_1", "info_2")

Однак кортежі в Python незмінні , тому ви не можете додавати змінні до кортежу після його створення.


3

Як зазначалося в інших відповідях, ви не можете змінити існуючий кортеж, але ви завжди можете створити новий кортеж (який може брати деякі або всі предмети з існуючих кортежів та / або інших джерел).

Наприклад, якщо всі об'єкти, що цікавлять, є скалярними змінними, і ви знаєте назви цих змінних:

def maketuple(variables, names):
  return tuple(variables[n] for n in names)

наприклад, як у цьому прикладі:

def example():
  x = 23
  y = 45
  z = 67
  return maketuple(vars(), 'x y z'.split())

звичайно, цей один випадок буде більш просто виражений як (x, y, z)(або взагалі попередньо названий (23, 45, 67)), але цей maketupleпідхід може бути корисним у деяких складніших випадках (наприклад, коли імена, що використовуються, також визначаються динамічно і додаються до списку під час обчислення).


2

Я впевнений, що синтаксис цього в python:

user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)

Після встановлення кортежі неможливо змінити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.