Python列表推导式
在本教程中,我们将讨论Python中的列表推导式。Python以其能够生成优雅、简洁且几乎可以与普通英语一样易于阅读的代码而闻名。列表推导式是语言中最具特色的功能之一,它允许我们用一行代码开发复杂的功能。然而,许多Python编写者在充分利用列表推导式的更复杂方面时遇到困难。有时程序员可能过度使用它们,导致代码效率低下且难以阅读。
示例:
这里我们给出了Python中列表推导式的基本示例。代码如下 –
Person = ["Piyali", "Hiya", "Rudrashish", "Badsha", "Lipi"]
newlist = [x for x in Person if "i" in x]
print(newlist)
输出:
现在我们在Python中编译上述代码,在成功编译后运行它。然后下面给出输出 –
['Piyali', 'Hiya', 'Rudrashish', 'Lipi']
语法:
Python中的列表推导语法如下 –
newlist = [expression for item in iterable if condition == True]
这里我们展示了列表推导的基本用法。
程序代码:
现在我们给出不使用列表推导的代码示例;如何使用Python的for循环将列表中的每个数字平方?代码如下:
#using for loop to iterate through items in list
numbers = [3, 5, 1, 7, 3, 9]
num = []
for n in numbers:
num.append(n**2)
print(num)
输出:
现在我们在Python中编译上述代码,并在成功编译后运行它。然后输出如下 –
[9, 25, 1, 49, 9, 81]
只需使用列表推导的一行代码即可完成此操作。
程序代码:
现在我们给出Python中使用列表推导对列表中的每个数字进行平方的代码示例。代码如下:
#using list comprehension to iterate through list items
numbers = [3, 5, 1, 7, 3, 9]
num = [n**2 for n in numbers]
print(num)
输出:
现在我们在Python中编译上述代码,并在编译成功后运行它。然后下面给出输出 –
[9, 25, 1, 49, 9, 81]
使用列表推导的好处
在Python中使用列表推导的好处有很多。以下是这些优势:
1. 循环和映射:
循环和映射通常被认为比列表推导更具Python风格。但是,与其仅仅接受这种评判,不妨考虑一下在Python中使用列表推导的优势,与其他方法相比的情况。稍后我们将了解到一些情况,在这些情况下,其他方法是更可取的选择。
2. 单一工具使用:
在Python中使用列表推导的一个重要优势是它是一个可以在各种情况下使用的单一工具。我们不需要为每种情况采取新的策略。列表推导可以用于映射、过滤和基本列表生成。
3. 不依赖于正确的参数:
列表推导被认为是具有Python风格的,因为Python强调简单、高效的工具可以在许多场景中使用。作为一个额外的好处,在使用Python中的列表推导时,我们不需要记住正确参数的顺序,就像调用map()函数时那样。
4. 容易使用:
列表推导比循环更容易理解和掌握,因为它们更具申明性。在使用循环时,我们必须关注列表的构建方式。我们必须手动构建一个空列表,遍历列表的条目,并将每个条目添加到列表的末尾。相反,在Python中使用列表推导,我们可以关注我们要放入列表中的内容,让Python处理列表的生成。
程序代码:
# Import module to keep track of time
import time
# defining function to execute for loop
def for_loop(num):
l = []
for i in range(num):
l.append(i + 10)
return l
# defining function to execute list comprehension
def list_comprehension(num):
return [i + 10 for i in range(num)]
# Giving values to the functions
# Calculating time taken by for loop
start = time.time()
for_loop(10000000)
end = time.time()
print('Time taken by for loop:', (end - start))
# Calculating time taken by list comprehension
start = time.time()
list_comprehension(10000000)
end = time.time()
print('Time taken by list comprehension:', (end - start))
输出:
现在我们用Python编译上面的代码,在成功编译后运行它。然后输出如下 –
Time taken by for loop: 7.005999803543091
Time taken by list comprehension: 2.822999954223633
使用列表推导在字符串中进行迭代
列表推导也可以用于字符串,因为它们是可迭代对象。
程序代码:
现在我们给出使用列表推导在Python中迭代给定的字符串的代码示例。代码如下 –
letters = [ alpha for alpha in 'javatpoint' ]
print( letters)
输出:
['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't']
使用条件语句的列表推导
条件语句可以通过列表推导来改变现有的列表(或其他元组)。我们将创建一个包含数学运算符、数字和一定范围值的列表。
程序代码:
number_list = [ num for num in range(30) if num % 2 != 0]
print(number_list)
输出:
现在我们将上述代码编译成Python,并在成功编译后运行它。然后输出如下 –
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]
将奇数元素添加到列表:
在这里,我们将奇数元素从给定列表中相加。这是Python中列表理解的一个示例。下面是代码 –
def Sum(n):
dsum = 0
for ele in str(n):
dsum += int(ele)
return dsum
List = [47, 69, 73, 97, 105, 845, 307]
newList = [Sum(i) for i in List if i & 1]
print(newList)
输出:
现在我们在Python中编译上面的代码,并在成功编译之后运行它。然后输出如下所示 –
[11, 15, 10, 16, 6, 17, 10]
嵌套列表推导
嵌套列表推导与嵌套的for循环类似,是在另一个列表推导内部的列表推导。实现嵌套循环的程序如下:
程序代码:
nested_list = []
for _ in range(3):
# Append an empty sublist inside the list
nested_list.append([])
for __ in range(5):
nested_list[_].append(__ + _)
print(nested_list)
输出:
现在我们在Python中编译上述代码,在编译成功后,我们运行它。然后输出如下 –
[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]
相同的结果可以通过利用分层列表推导在较少的代码行中创建。
程序代码:
下面给出了嵌套列表推导的代码 –
# Nested list comprehension
nested_list = [[_ + __ for _ in range(5)] for __ in range(3)]
print(nested_list)
输出:
现在我们将以上代码编译成Python,在成功编译后运行它。然后输出如下 –
[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]
列表推导是一种基于现有列表描述和创建新列表的强大工具。总的来说,列表推导比传统的列表构造函数和循环更轻量化、使用更方便。为了提供用户友好的代码,我们应该避免为列表推导写入大量代码。可以将列表或其他可迭代对象的每一个解释重构为一个for循环,但并不是所有的for循环都能在列表推导的框架内重建。