Latest web development tutorials

هيكل البيانات Python3

يتم الجمع بين هذا الفصل أساسا مع العلم علمنا في وقت سابق لإدخال هياكل البيانات بيثون.


قائمة

قائمة الثعبان هو متغير، والتي هي أهم سمة يميزها عن سلاسل والصفوف، وهي جملة واحدة: قائمة يمكن تعديلها، في حين الجمل والصفوف لا تستطيع ذلك.

وهنا لائحة من بيثون:

الطريق وصف
list.append (خ) لإضافة عنصر إلى نهاية القائمة، أي ما يعادل [ليون (أ):] = [س].
list.extend (L) بإضافة جميع العناصر من قائمة محددة لتوسيع القائمة، أي ما يعادل [ليون (أ):] = L.
list.insert (ط، خ) إدراج عنصر في الموقع المحدد. وإلى أن يتم إدراج المعلمة الأولى في مؤشره أمام العناصر، مثل a.insert (0، س) سيتم إدراج قبل القائمة كلها ولكن a.insert (ليون (أ)، خ) ما يعادل a.append ( خ).
list.remove (خ) يزيل العنصر الأول من القائمة التي تقدر قيمتها س. إذا لم يكن هناك مثل هذا العنصر، فإنه سيعود خطأ.
list.pop ([أنا]) إزالة عناصر من الموضع المحدد في هذه القائمة، وإعادته. إذا لم تقم بتحديد مؤشر، a.pop) إرجاع (العنصر الأخير. تم إزالة عنصر فورا من القائمة. (طريقة وضع قوسين حول ط يشير إلى أن المعلمة اختيارية، لا أنه يجب عليك كتابة أقواس مربعة، وسوف كثيرا ما نرى هذه الرموز في بيثون مكتبة المراجع).
list.clear () إزالة كافة العناصر في القائمة، أي ما يعادل ديل ل[:].
list.index (خ) يعود مؤشر القائمة مع قيمة x في العنصر الأول. إذا لم يكن هناك عنصر مطابقة سيعود خطأ.
list.count (خ) يعود يظهر عدد مرات العاشر في القائمة.
list.sort () من العناصر في القائمة ليتم فرزها.
list.reverse () عناصر مقلوب في القائمة.
list.copy () إرجاع نسخة الضحلة من قائمة تساوي [:].

يوضح المثال التالي معظم القائمة طرق:

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]

ملاحظة: على غرار إدراج أو إزالة أو تعديل طريقة الفرز قائمة، وما إلى ذلك لا قيمة الإرجاع.


استخدام قائمة كما كومة

يمكن بسهولة طريقة وضع قائمة من قوائم استخدامها كحزمة، كومة كبنية بيانات محددة، وأول من أدخل العنصر الأخير أن يطلق سراحه (إل آي إف). استخدام إلحاق طريقة () يمكن إضافة عنصر إلى أعلى المكدس. دون وجود مؤشر واضح البوب ​​() طريقة يمكن استرداد عنصر من الجزء العلوي من كومة. على سبيل المثال:

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

استخدام قائمة كما طابور

ويمكن أيضا أن القائمة أن تستخدم قائمة الانتظار، قائمة الانتظار هو الأول للانضمام إلى عناصر، الأول اتخاذها للخروج، ولكن تأخذ هذه القائمة كما والغرض من ذلك هو عدم كفاءة. تضاف في نهاية القائمة أو المنبثقة عناصر من السرعة، ولكن، لإدراج أو إخراج من سرعة رئيس ليس بسرعة (لأن جميع العناصر الأخرى يجب ان تتحرك واحدا تلو الآخر) في القائمة.

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")           # Terry arrives
>>> queue.append("Graham")          # Graham arrives
>>> queue.popleft()                 # The first to arrive now leaves
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

comprehensions قائمة

توفر القوائم المضمنة بطريقة موجزة لإنشاء قوائم من التسلسل. عموما سوف يتم تطبيق بعض التطبيقات إلى كل عنصر من سلسلة من العمليات، وكانت النتيجة التي يتم الحصول عليها كعناصر لإنشاء قائمة جديدة، أو إنشاء تسلسل تحدد وفقا لشروط التصميم.

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

هنا سوف ندرج كل رقم ثلاثة، للحصول على قائمة جديدة:

>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]

الآن لعبنا الحيل قليلا:

>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]

نحن هنا استدعاء أسلوب فردي لكل عنصر في تسلسل:

>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']

يمكننا استخدام إذا شرط كمرشح:

>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]

وهنا بعض العروض على ركوب الدراجات وغيرها من المهارات:

>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

يمكن القوائم المضمنة استخدام التعبيرات المعقدة أو وظائف متداخلة:

>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

قائمة متداخلة الفهم

ويمكن أيضا أن تتداخل القوائم الثعبان.

يوضح المثال التالي قائمة 3X4 المصفوفة:

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

يسرد المثال التالي 3X4 المصفوفة الى قائمة تحويل 4X3:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

الأمثلة التالية ويمكن أيضا استخدام الأساليب التالية:

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

طريقة أخرى:

>>> transposed = []
>>> for i in range(4):
...     # the following 3 lines implement the nested listcomp
...     transposed_row = []
...     for row in matrix:
...         transposed_row.append(row[i])
...     transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

بيان ديل

يمكنك استخدام العبارة ديل من قبل مؤشر بدلا من قيمة لإزالة عنصر من القائمة. هذا هو استخدام البوب ​​() بإرجاع قيمة مختلفة. يمكنك استخدام العبارة ديل لإزالة قطع من القائمة، أو مسح القائمة بأكملها (يتم تعيين الطريقة السابقة لدينا من عرض قطع إلى قائمة فارغة). على سبيل المثال:

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

يمكنك أيضا حذف متغير مثيل مع ديل:

>>> del a

الصفوف ومتواليات

عدد الصفوف (tuple) من قيم مفصولة بفواصل يتألف، على سبيل المثال:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

كما ترون، والمغلقة على الانتاج الصفوف دوما بين قوسين، وذلك للتعبير عن بنية متداخلة بشكل صحيح. قد لا يكون هناك قوسين أو عند الدخول، ولكن بين قوسين مطلوبة عادة (إذا كانت الصفوف (tuple) هي جزء من التعبير أكبر).


تعيين

مجموعة هو جمع غير مرتبة من عناصر فريدة من نوعها. وتشمل السمات الأساسية الاختبار والقضاء على العناصر المكررة.

يمكنك إنشاء مجموعة من الأقواس ({}). ملاحظة: إذا كنت ترغب في إنشاء مجموعة فارغة، يجب عليك استخدام مجموعة () بدلا من {}؛ مما يخلق القاموس فارغة، المقطع التالي سوف نقدم هذا الهيكل البيانات.

ما يلي هو مظاهرة بسيطة:

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 删除重复的
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 检测成员
True
>>> 'crabgrass' in basket
False

>>> # 以下演示了两个集合的操作
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # a 中唯一的字母
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 在 a 中的字母,但不在 b 中
{'r', 'd', 'b'}
>>> a | b                              # 在 a 或 b 中的字母
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 在 a 和 b 中都有的字母
{'a', 'c'}
>>> a ^ b                              # 在 a 或 b 中的字母,但不同时在 a 和 b 中
{'r', 'd', 'b', 'm', 'z', 'l'}

جمع أيضا دعم اشتقاق الصيغة:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

قاموس

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

تسلسل مستمر من مؤشر عدد صحيح، وهذا الفرق هو، يمكن أن الكلمة القاموس فهرستها كلمات أن يكون أي نوع غير قابل للتغيير، وعادة مع سلسلة أو رقمية.

أفضل طريقة لفهم أنها القاموس هي غير مرتبة أزواج مفتاح => قيمة. في نفس القاموس، يجب أن تكون مفاتيح مختلفة عن بعضها البعض.

زوج من الأقواس يخلق القاموس فارغة: {}.

هذا مثال بسيط للاستخدام القاموس:

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

منشئ ديكت () لبناء القاموس مباشرة من القائمة الرئيسية-الصفوف (tuple). إذا كان لديك نمط ثابت، comprehensions قائمة تحديد أزواج قيمة المفتاح-معينة:

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

وبالإضافة إلى ذلك، القاموس يمكن استخدامها لإنشاء تعبير لاستخلاص أي قاموس من المفاتيح والقيم:

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

إذا كانت الكلمة هي مجرد سلسلة من أزواج قيمة المفتاح باستخدام الحجج الكلمة أكثر ملاءمة في بعض الأحيان لتحديد:

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

تقنيات اجتياز

عندما يجتاز في القواميس، ويمكن استخدام قيمة المفتاح والمقابلة وحدات () طريقة للترجمة الفورية من:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

عندما يجتاز في تسلسل، ومؤشر موقف والقيمة المقابلة يمكن استخدام اعدد () الحصول على وظيفة أيضا:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

بينما يجتاز اثنين أو أكثر من متواليات، يمكنك استخدام الرمز () في الجمع:

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

لاجتياز سلسلة العكسي، أولا تحديد تسلسل، ثم وظيفة الدعوة reversesd ():

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

يجتاز سلسلة وفقا للترتيب، واستخدام وظيفة فرزها () بإرجاع تسلسل فرزها، لا تعديل القيمة الأصلية:

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

راجع وثائق