Python教程-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]
这里我们展示了列表推导的基本用法。
程序代码:
现在我们给出一个不使用列表推导的代码示例;如何仅使用 for 循环在 Python 中将列表的每个数字平方?代码如下所示 -
#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 特色。但是,与其轻率地接受这种判断,不妨考虑在各种情况下使用列表推导的优势,而不是采用替代方法。稍后我们将了解在哪些情况下,替代方法是更好的选择。
2. 单一工具的用途:
使用列表推导在 Python 中的一个基本优势是,它是一个可在各种情况下使用的单一工具。我们不需要为每种情况采取新的策略。列表推导可用于映射、筛选和基本列表生成。
3. 不依赖于适当的参数:
列表推导被认为是 Python 特色,因为 Python 强调使用简单、高效的工具,这些工具可以在许多情况下使用。作为奖励,当使用列表推导时,不需要像调用 map() 时那样记住参数的适当顺序。
4. 使用简单:
与循环相比,列表推导更易于阅读和理解,因为它们更具有声明性。在使用循环时,我们必须关注如何确切地构建列表。我们必须手动构建一个空列表,循环遍历列表的条目,并将每个条目添加到列表的末尾。相反,在使用列表推导时,我们可以专注于要放入列表中的内容,让 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 'javatiku' ]
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 循环都可以在列表推导框架中重新构建。