python: liste vs tuple, her birini ne zaman kullanacaksınız? [çoğaltmak]

bu sorunun zaten burada bir cevabı var:

Python'da

, listeleri ne zaman ve ne zaman tuples kullanmalısınız?

bazen

varsa, örneğin, bir seçim yok
"hello %s you are %s years old" % x

sonra X bir tuple olmalıdır.

ancak API'Yİ tasarlayan ve veri türlerini seçen kişi benimse, kurallar nelerdir?

355
tarihinde sordu flybywire 2009-11-10 17:50:58
kaynak

7 ответов

heterojen koleksiyonlar için güçlü bir tuples kültürü var, struct in C için kullandıklarınıza benzer ve diziler için kullandıklarınıza benzer homojen koleksiyonlar için listeler. Ancak bunu, diğer cevaplarda belirtilen mutability sorunu ile hiç Kare oluşturmadım. Mutabilitenin dişleri vardır (aslında bir yumru değiştiremezsiniz), homojenlik zorlanmaz ve bu yüzden çok daha az ilginç bir ayrım gibi görünüyor.

190
cevap Ned Batchelder 2017-06-14 15:36:13
kaynak

Tuples doğada sabit boyutu ise listeler dinamik.

Başka bir deyişle, tuple değişmez ise list mutable dir .

  1. bir tuple eleman ekleyemezsiniz. Tuples'in ekleme veya genişletme yöntemi yoktur.
  2. bir tuple öğeleri kaldıramazsınız. Tuples yok kaldırmak veya pop yöntemi.
  3. bu tuple değişmez, çünkü bir tuple elemanları bulabilirsiniz.
  4. bir öğe tuple var olup olmadığını kontrol etmek için in işleci de kullanabilirsiniz.

  • Tuples listelerden daha hızlıdır. sabit bir değer kümesi tanımlıyorsanız ve onunla yapacağınız tek şey tekrarlamak, bir bir liste yerine tuple.

  • değiştirilmesine gerek olmayan verileri "yaz-koru" durumunda kodunuzu daha güvenli hale getirir. Bir liste yerine bir tuple kullanmak, bu verilerin sabit olduğunu ve bunu geçersiz kılmak için özel bir düşünce (ve belirli bir işlev) gerekli olduğunu ima edilen bir assert ifadesine sahip olmak gibidir.

  • bazı tuples sözlük tuşları (özellikle, değişmez içeren tuples) olarak kullanılabilir dizeler, sayılar ve diğer tuples gibi değerler). Listeler değişmez olmadığı için listeler asla sözlük anahtarları olarak kullanılamaz.

kaynak: Python 3

555
cevap jldupont 2013-02-04 09:19:51
kaynak

inanıyorum (ve Python'da pek çok usta değilim) ana fark, bir tuple değişmez (atamadan sonra yerine değiştirilemez) ve bir liste değiştirilebilir (ekleme, değiştirme, çıkarma, vb.).

yani, atamadan sonra değiştirmemesi gereken tuples şeylerimi ve listelerim yapabileceklerimi yapmaya eğilimliyim.

75
cevap thornomad 2009-11-10 18:19:33
kaynak

mutable olmalı mı? Bir liste kullanın. Değiştirilemez mi? Bir tuple kullanın.

aksi takdirde, bu bir seçim sorusu.

Heterojen nesnelerin koleksiyonları için

(isim, sokak, şehir, eyalet ve zip içine kırık bir adres gibi) bir tuple kullanmayı tercih ederim. Onlar her zaman kolayca tuples adlı terfi .

aynı şekilde, koleksiyon tekrarlanacaksa, bir liste tercih ederim. Eğer öyleyse birden çok nesneyi bir tane olarak tutmak için sadece bir kap, bir tuple tercih ederim.

35
cevap AFoglia 2009-11-10 18:01:14
kaynak

karar vermeniz gereken ilk şey, veri yapısının değiştirilebilir olup olmamasıdır. Belirtildiği gibi, listeler değiştirilebilir, tuples değildir. Bu aynı zamanda tuples sözlük tuşları için kullanılabilir anlamına gelir, nerede listeleri olamaz.

tecrübelerimde, düzen ve pozisyonun anlamlı ve tutarlı olduğu durumlarda tuples genellikle kullanılır. Örneğin, kendi macera oyununuzu seçmek için bir veri yapısı oluştururken, listeler yerine tuples kullanmayı seçtim çünkü yumrudaki pozisyon anlamlıydı. İşte bu veri yapısından bir örnek:

pages = {'foyer': {'text' : "some text", 
          'choices' : [('open the door', 'rainbow'),
                     ('go left into the kitchen', 'bottomless pit'),
                     ('stay put','foyer2')]},}

tuple'daki ilk pozisyon, oyunu oynarken kullanıcıya görüntülenen seçimdir ve ikinci pozisyon, seçimin gittiği sayfanın anahtarıdır ve bu, tüm sayfalar için tutarlıdır.

Tuples da listelerden daha fazla bellek verimli, ancak bu fayda ne zaman belirginleştiğinden emin değilim.

Ayrıca think Python listeleri ve tuples bölümleri göz atın .

11
cevap Amanda Nyren 2009-11-10 19:06:02
kaynak

ancak API'Yİ tasarlayan ve veri türlerini seçen kişi benimse, kurallar nelerdir?

Giriş parametreleri için

ihtiyacınız olanı yapan en genel arayüzü kabul etmek en iyisidir. Nadiren sadece bir tuple veya listedir - daha sık sıra, dilimlenebilir veya yinelenebilir. Python'un ördek yazımı, giriş türlerini açıkça kontrol etmediğiniz sürece genellikle ücretsiz olarak alır. Kesinlikle kaçınılmaz olmadıkça bunu yapma.

Ürettiğiniz veriler için

(çıktı parametreleri) sizin için en uygun olanı döndürür, örneğin, tuttuğunuz datatype veya yardımcı işleviniz ne olursa olsun döndürür.

akılda tutulması gereken bir şey, eyaletinizin bir parçası olan bir liste (veya başka bir değiştirilebilir) döndürmekten kaçınmaktır, örneğin

class ThingsKeeper
    def __init__(self):
        self.__things = []

    def things(self):
        return self.__things  #outside objects can now modify your state

    def safer(self):
        return self.__things[:]  #it's copy-on-write, shouldn't hurt performance
9
cevap Rafał Dowgird 2009-11-10 18:46:15
kaynak

bir tuple üzerindeki bir listenin küçük ama önemli bir avantajı, listelerin biraz daha taşınabilir olma eğiliminde olmasıdır. Standart araçlar tuples desteklemek için daha az olasıdır. JSON, örneğin, bir tuple türü yoktur. YAML yapar, ancak sözdizimi oldukça güzel olan liste sözdizimine kıyasla çirkin.

bu durumlarda, bir tuple DAHİLİ olarak kullanmak ve daha sonra bir ihracat sürecinin bir parçası olarak listeye dönüştürmek isteyebilirsiniz. Alternatif olarak, her yerde listeleri kullanmak isteyebilirsiniz tutarlılık.

2
cevap Doug F 2014-05-10 01:05:07
kaynak

Diğer sorular python list types tuples