简介:

在本教程中,我们将讨论 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 循环都可以在列表推导框架中重新构建。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程