Python: jaký je rozdíl mezi (1,2,3) a [1,2,3], a když se měl použít každý?

hlasů
44

Na mnoha místech, (1,2,3)a [1,2,3]mohou být použity zaměnitelně.

Kdy je vhodné použít jedno nebo druhé, a proč?

Položena 05/08/2008 v 08:18
zdroj uživatelem
V jiných jazycích...                            


14 odpovědí

hlasů
31

Z FAQ Python :

Seznamy a n-tice, zatímco v mnoha ohledech podobné, jsou obvykle používány v zásadě různými způsoby. N-tice lze považovat za podobnou Pascal záznamů nebo C structs; jsou to malé sbírky související údaje, které mohou být různých typů, které jsou provozovány na jako skupina. Například, souřadnicové vhodně reprezentován jako n-tice dvou nebo tří čísel.

Seznamy, na druhou stranu, jsou spíš jako pole v jiných jazycích. Mají tendenci držet různý počet objektů, z nichž všechny mají stejný typ a které jsou provozovány na jeden po druhém.

Obecně konvencí byste si vybrat seznam nebo n-tice jen na základě jeho (ne) proměnlivosti. Ty by si vybrat n-tice pro malé sbírek zcela odlišných kusy dat, ve kterém by plnohodnotná třída být příliš silný, a seznam pro sbírek jakékoliv přiměřené velikosti, kde máte homogenní sadu dat.

Odpovězeno 05/08/2008 v 14:22
zdroj uživatelem

hlasů
19

Tento seznam [1,2,3] je dynamická a flexibilní, ale že flexibilita je v ceně rychlosti.

N-tice (1,2,3) je pevná (neměnná), a proto rychlejší.

Odpovězeno 05/08/2008 v 08:27
zdroj uživatelem

hlasů
11

N-tice jsou rychlé \ flexibilní způsob, jak vytvořit kompozitní datového typu. Seznamy jsou nádoby na dobře, seznamy objektů.

Například, měli byste použít seznam pro uložení seznamu podrobností studentů ve třídě.

Každý detail student v tomto seznamu může být 3-tice obsahující jejich počet válců, název a testovací skóre.

`[(1,'Mark',86),(2,'John',34)...]`

Také proto, že n-tice jsou neměnné, které mohou být použity jako klíče ve slovnících.

Odpovězeno 07/08/2008 v 12:21
zdroj uživatelem

hlasů
7

Pojem n-tic jsou velmi expresivní:

  • Pragmaticky, jsou skvělé pro balení a vybalování hodnoty ( x,y=coord).

  • V kombinaci s slovníků (hash tabulky), které umožňují formy mapování, které by jinak vyžadovalo mnoho úrovní sdružení. Uvažujme například značení, které bylo zjištěno, (x, y).

    // PHP
    if (!isset($found[$x])) {
        $found[$x] = Array();
        $found[$x][$y] = true;
    } else if (!isset($found[$x][$y])) {
        $found[$x][$y] = true;
    }
    
    # Python
    found[(x,y)] = True # parens added for clarity
    
  • Seznamy by měly být používány s očekáváním operací na jeho obsah (tedy různé zmínky o neměnnosti). Jeden z nich bude chtít pop, tlak, spoje, plátek, hledání, vložit předtím, vložte po atd se seznamem.

  • N-tice by měla být reprezentace nízkoúrovňový objektu, kde jsou jednoduché porovnání poskytované nebo operace, jako je extrakce vícenásobná radost prvek nebo prvky n předvídatelným způsobem, jako je například souřadnic příkladu uvedeného výše.

  • Konečně, seznamy nejsou hashable, takže typ mapování provádí pomocí slovníků (hash tabulek v Perlu, asociativních polí v jazyce PHP) musí být provedeno s n-tic.

    Zde je jednoduchý příklad n-tic a slovníků, spolu konečně:

    """
    couple is a tuple of two people
    doesLike is a dictionary mapping couples to True or False
    """
    couple = "john", "jane"
    doesLike = dict()
    doesLike[couple] = True
    doesLike["jane", "john"] = False # unrequited love :'(
    
Odpovězeno 15/08/2008 v 19:00
zdroj uživatelem

hlasů
4

[1, 2, 3]Níže je seznam, ve kterém je možné přidat nebo odstranit položky.
(1, 2, 3)je n-tice, ve které jednou definován, modifikace nelze provést.

Odpovězeno 25/06/2011 v 12:14
zdroj uživatelem

hlasů
3

Pokaždé, když jsem třeba předat v kolekci položek, které mají funkci, pokud chci funkci neměnit hodnoty předaných v - I používat n-tice.

Else if Chci mít funkci pro změnu hodnot, já používám seznam.

Vždy, pokud používáte externí knihovny a je třeba projít v seznamu hodnot do funkce a nejste jisti, o integritu dat, použijte n-tice.

Odpovězeno 15/08/2008 v 17:38
zdroj uživatelem

hlasů
2
  • N-tice může představovat klíč slovníku, protože to je neměnné.
  • Používat seznamy, pokud máte sběr dat, která nepotřebuje náhodný přístup.
Odpovězeno 20/05/2017 v 07:30
zdroj uživatelem

hlasů
2

Otevřete konzoli a spusťte python. Zkuste to:

  >>> list = [1, 2, 3]     
  >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
     '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Jak můžete vidět poslední na posledním seznamu čáry mají následující metody: ‚Připojit‘, ‚počet‘, ‚rozšíření‘, ‚index‘, ‚vložku‘, ‚pop‘, ‚odstranit‘, ‚vzad‘, ‚sort '

Nyní se snaží stejný pro tice:

>>> tuple = (1, 2, 3)
>>> dir(tuple)
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

Pouze ‚count‘ a ‚index‘ ze seznamu metod se zde objeví.

Důvodem je, že n-tice jsou neměnné a nepodporují žádné změny. Namísto toho jsou jednodušší a rychlejší ve vnitřní implementace.

Odpovězeno 10/10/2015 v 19:30
zdroj uživatelem

hlasů
2

Jak již bylo uvedeno jiné, seznamy a n-tice jsou obě nádoby, které mohou být použity k ukládání python objekty. Seznamy jsou rozšiřitelné a jejich obsah může měnit podle zadání, na druhé straně n-tice jsou neměnné.

Také seznamy nemohou být použity jako klíče ve slovníku, zatímco tice může.

Odpovězeno 08/08/2008 v 07:06
zdroj uživatelem

hlasů
1

(1,2,3) a [1,2,3] mohou být použity zaměnitelně v ojedinělých podmínkách.

So (1,2,3) je n-tice a je neměnná. Změny, které si přejí, aby se muset přepsat objekt.

[1,2,3] je uveden seznam a prvky mohou být připojeny a odstraní.

Seznam má více funkcí, než n-tice.

Odpovězeno 31/03/2018 v 09:14
zdroj uživatelem

hlasů
1

[1,2,3] Níže je seznam.

(1,2,3) je n-tice a neměnné.

Odpovězeno 08/10/2014 v 07:02
zdroj uživatelem

hlasů
1

Pokud můžete najít řešení, které pracuje s tic, jejich použití, protože nutí neměnnost jaký druh jednotek, které se více funkční cesta. Skoro nikdy litovat jít dolů funkční / neměnnou cestu.

Odpovězeno 08/08/2008 v 07:48
zdroj uživatelem

hlasů
0

(1,2,3)je n-tice a [1,2,3]je seznam. Buď z nich představují sekvence čísel, ale na vědomí, že n-tice jsou neměnné a seznamu jsou měnitelné Python objekty.

Odpovězeno 27/06/2016 v 20:48
zdroj uživatelem

hlasů
0

(1,2,3)je n-tice, když [1,2,3]je seznam. N-tice je neměnný objekt, zatímco seznam je proměnlivý.

Odpovězeno 19/02/2016 v 02:15
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more