بايثون:ما هو الفرق بين (1,2,3) و [1,2,3] و متى يجب استخدام كل منها ؟

StackOverflow https://stackoverflow.com/questions/1983

  •  08-06-2019
  •  | 
  •  

سؤال

في العديد من الأماكن ، (1,2,3) (tuple) ، [1,2,3] (قائمة) يمكن أن تستخدم بالتبادل.

متى يجب استخدام واحدة أو أخرى ، لماذا ؟

هل كانت مفيدة؟

المحلول

من بيثون التعليمات:

قوائم الصفوف ، بينما مماثلة في العديد من النواحي ، تستخدم عادة في طرق مختلفة جوهريا.المجموعات يمكن أن تكون من حيث الفكر تشبه باسكال السجلات أو ج البنيات;إنهم مجموعات صغيرة من البيانات ذات الصلة التي قد تكون من أنواع مختلفة التي يتم تشغيلها على كمجموعة.على سبيل المثال, الديكارتي تنسيق بشكل مناسب يمثل المجموعة من اثنين أو ثلاثة أرقام.

قوائم ، من ناحية أخرى ، هي أكثر مثل المصفوفات في لغة أخرى.فإنها تميل إلى عقد عدد متباين من الكائنات التي لها نفس النوع و التي يتم تشغيلها على واحدة تلو الأخرى.

عموما حسب الاتفاقية لن تختار قائمة أو tuple فقط على (im)التحولية.يمكنك اختيار المجموعة الصغيرة مجموعات مختلفة تماما قطعة من البيانات والتي كاملة الطبقة سيكون من الوزن الثقيل جدا ، قائمة على مجموعات من أي حجم معقول حيث لديك مجموعة متجانسة من البيانات.

نصائح أخرى

قائمة [1,2,3] ديناميكية ومرنة ولكن هذه المرونة يأتي بسرعة التكلفة.

Tuple (1,2,3) هو ثابت (ثابت) وبالتالي أسرع.

الصفوف هي سريعة\طريقة مرنة لإنشاء مركب البيانات-أنواع.القوائم هي حاويات, حسنا, قوائم الكائنات.

على سبيل المثال, يمكنك استخدام قائمة لتخزين قائمة معلومات الطلاب في الصف.

كل طالب من التفصيل في هذه القائمة قد تكون 3-المجموعة التي تحتوي على لفة رقم واسم درجة الاختبار.

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

أيضا, لأن الصفوف هي ثابتة يمكن استخدامها كمفاتيح في القواميس.

مفهوم الصفوف هي معبرة للغاية:

  • عمليا, فهي كبيرة على التعبئة والتفريغ القيم (x,y=coord).

  • في تركيبة مع القواميس (الجداول التجزئة) ، فهي تسمح أشكال الخرائط التي سوف تتطلب خلاف ذلك العديد من المستويات النقابية.على سبيل المثال النظر في العلامات التي (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
    
  • قوائم ينبغي أن تستخدم مع توقع العمليات على محتوياته (ومن هنا مختلف يذكر ثبات).أحد يريد أن البوب, دفع, وصلة, شريحة, البحث قبل إدراج, إدراج بعد ، وما إلى ذلك قائمة.

  • الصفوف يجب أن يكون انخفاض مستوى تمثيل كائن ، حيث المقارنات البسيطة ، أو العمليات مثل استخراج ن يستحق عنصر أو عناصر n بطريقة يمكن التنبؤ بها ، مثل إحداثيات المثال المذكور في وقت سابق.

  • وأخيرا القوائم ليست hashable ، لذلك النوع من الخرائط القيام به مع القواميس (الجداول التجزئة في بيرل, صفائف النقابي في PHP) يجب أن يتم مع الصفوف.

    وهنا مثال بسيط من الصفوف و القواميس معا في الماضي:

    """
    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 :'(
    

[1, 2, 3] قائمة في أي واحد يمكن إضافة أو حذف البنود.
(1, 2, 3) هو المجموعة التي بمجرد تعريف التعديل لا يمكن القيام به.

كلما كنت بحاجة إلى تمرير مجموعة من العناصر إلى وظيفة ، إذا كنت تريد وظيفة إلى تغيير القيم التي تم تمريرها في استخدام الصفوف.

آخر إذا كنت ترغب في الحصول على وظيفة إلى تغيير القيم يمكنني استخدام قائمة.

دائما إذا كنت تستخدم المكتبات الخارجية و تحتاج إلى تمرير في قائمة القيم إلى وظيفة غير متأكد من سلامة البيانات ، استخدم tuple.

كما ذكر آخرون, قوائم الصفوف على حد سواء الحاويات التي يمكن استخدامها لتخزين الثعبان الكائنات.القوائم الموسعة ومحتوياتها يمكن أن تتغير من قبل الاحالة ، من ناحية أخرى الصفوف غير قابلة للتغيير.

كما القوائم لا يمكن استخدام المفاتيح في القاموس في حين يمكن الصفوف.

فتح وحدة التحكم وتشغيل بيثون.جرب هذا:

  >>> 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']

كما قد ترى آخر على خط آخر القائمة من الطرق التالية:'إلحاق', 'count', 'تمتد', 'index', 'أدخل', 'البوب', 'إزالة', 'عكس', 'نوع'

الآن جرب نفس المجموعة:

>>> 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']

فقط 'count' و 'مؤشر' من قائمة أساليب يظهر هنا.

وهذا لأن الصفوف هي ثابتة وأنها لا تدعم أي تعديلات.بدلا من ذلك فهي أبسط وأسرع في التنفيذ الداخلي.

  • Tuple قد يمثل المفتاح في القاموس ، لأنه غير قابل للتغيير.
  • استخدام قوائم إذا كان لديك مجموعة من البيانات التي لا تحتاج الوصول العشوائي.

إذا كان يمكنك العثور على الحل الذي يعمل مع الصفوف ، واستخدامها ، كما أنها قوات ثبات أي نوع من يدفع لك أكثر وظيفية المسار.كنت تقريبا لم يندم نزول وظيفية/غير قابل للتغيير المسار.

[1,2,3] هي قائمة.

(1,2,3) هو tuple وغير قابل للتغيير.

(1,2,3) و [1,2,3] يمكن أن تستخدم بالتبادل في ظروف نادرة.

حتى (1,2,3) هو tuple و هو غير قابل للتغيير.أية تغييرات ترغب في جعل الحاجة إلى الكتابة فوق الكائن.

[1,2,3] قائمة وعناصر يمكن إلحاق وإزالتها.

القائمة لديه ميزات أكثر من tuple.

(1,2,3) هو tuple حين [1,2,3] هي قائمة.Tuple هو كائن غير قابل للتغيير في حين أن القائمة قابلة للتغيير.

(1,2,3) هو المجموعة ، [1,2,3] هي قائمة.إما من اثنين تمثل تسلسل من الأرقام ولكن لاحظ أن الصفوف غير قابلة للتغيير القائمة قابلة للتغيير الثعبان الكائنات.

(1,2,3)-المجموعة [1,2,3]-قائمة قوائم قابلة للتغيير الذي العمليات المختلفة لا يمكن أن يؤديها في حين أن الصفوف غير قابلة للتغيير ولا يمكن تمديدها.لا يمكن إضافة أو حذف أو تحديث أي عنصر من المجموعة مرة واحدة يتم إنشاؤه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top