numbers = [-11, -12, 13, 14, -15, 16, 17, -18, -19, 20]positives = [x for x in numbers if x >0]negatives = [x for x in numbers if x <0]print('positives:', positives)print('negatives:', negatives)
وإن شئت أن تجعلها فعلاً مستقلاً، ولاحظ أن التعريف يُفرق على عدة أسطر إذا طال.
def calculate_net( monthly_income: list[float], monthly_expense: list[float]) ->tuple[list[float], float]:""" Calculate the net income for each month and the total net income for the year. """ monthly_net = [inc - exp for inc, exp inzip(monthly_income, monthly_expense)]return monthly_net, sum(monthly_net)
لكن قد لا نحتاج لهذا التفصيل إلا فيما هو معقَّد، وحين يحصل الاشتباه، لكن التعوُّد على مثل هذا خصوصًا في العمل الجماعي، وحين يكبُر المشروع أفضل.
معرفة النقاط المجاورة
تقول الرياضيات أن المسافة الإقليدية (على سطح مستوي لا متعرج) بين نقطتين تحكمها المعادلة:
\[
d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}
\]
نريد استعماله لقائمة من النقاط لمعرفة النقاط المجاورة.
points = [(1, 2), (3, 4), (5, 6), (7, 8)]x1, y1 = (2, 4)distances = []for x2, y2 in points: d = ((x2 - x1) **2+ (y2 - y1) **2) **0.5 distances.append(d)print(f'distance from {x2, y2} to {x1, y1} is {d}')min_distance =min(distances)min_distance_index = distances.index(min_distance)print('min distance index:', min_distance_index)nearest_point = points[min_distance_index]print(f'nearest point to {x1, y1} is {nearest_point}')
distance from (1, 2) to (2, 4) is 2.23606797749979
distance from (3, 4) to (2, 4) is 1.0
distance from (5, 6) to (2, 4) is 3.605551275463989
distance from (7, 8) to (2, 4) is 6.4031242374328485
min distance index: 1
nearest point to (2, 4) is (3, 4)
فلنجعلها فعلاً، وسنفصِّلُ في الوصف حتى نبيِّنَ وظيفة الفعل لأي مستفيد بما يهمه، فنذكر الماهية ولا نذكر الكيفية التفصيلية:
def nearest_point( points: list[tuple[float, float]], point: tuple[float, float]) ->tuple[float, float]:"""Find the nearest point to the given point. Args: points: A list of (x,y) coordinate tuples representing points in 2D space. Must contain at least one point. point: A tuple of (x,y) coordinates representing the reference point. Returns: The (x,y) coordinates of the point from the input list that is closest to the reference point, measured by Euclidean distance. """ x1, y1 = point distances = []for x2, y2 in points: d = ((x2 - x1) **2+ (y2 - y1) **2) **0.5 distances.append(d) min_distance =min(distances) min_distance_index = distances.index(min_distance)return points[min_distance_index]# Testsassert nearest_point(points=[(1, 2)], point=(2, 3)) == (1, 2)assert nearest_point(points=[(1, 2), (3, 4), (5, 6), (7, 8)], point=(2, 4)) == (3, 4)
أمثلة إضافية على الإنشاء المختصر
يمكن استعمال اختصار من اختصار على النحو التالي. في هذا المثال نفرد قائمة مكونة من قوائم عددية، فنحوِّلها لتكون قائمة واحدة مكوَّنة من جميع هذه الأرقام:
vec = [[1,2,3], [4,5,6], [7,8,9]][num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
إذا كتبناها من غير اختصار فشكلها كالتالي (لاحظ استعملنا متغير flat لتجميع القيَم المفردة):
flat = []for elem in vec:for num in elem: flat.append(num)flat
[1, 2, 3, 4, 5, 6, 7, 8, 9]
وهذا مثال لحاصل الضرب الديكارتي بين مجموعتين رياضيتين:
colors = ['red', 'green']shapes = ['circle', 'square']cartesian_product = [(color, shape) for color in colors for shape in shapes]cartesian_product