列表解析式

列表解析式

列表解析式因编译器进行优化,提高了效率,减少出错,增加可读性

语法

  • [返回值 for 元素 in 可迭代对象 if条件]
  • 使用中括号[],内部是for循环,if条件语句可选
  • 返回一个新列表

示例1:

生成一个列表,元素0-9,对每一个元素自增1后求平方返回新列表

#通常写法为:
new = []
for i in range(10):
    new.append((i+1)**2)
print(new)

#使用列表解析式方法:
new = [(i+1)**2 for i in range(10)]
print(new)

输出结果相同:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

示例2:

获取10以内的偶数

list = [i for i in range(10) if i % 2 == 0]

输出结果为:

[0, 2, 4, 6, 8]

示例3:

20以内,即能被2整除又能被3整除的数

#以下两种方法都可以list1 = [i for i in range(20) if i % 2 == 0 if i % 3 == 0]        #方法一
list2 = [i for i in range(20) if i % 2 == 0 and i % 3 == 0]       #方法二

列表解析式进阶

  • [返回值 for i in 可迭代对象A for j in 可迭代对象B]
  • 等价于:

      list = []

        for i in iterableA:

          for j in iterableB:

            list.append(expr)

示例1:

list1 = [(x,y) for x in "abc" for y in range(3)]
list2 = [[x,y] for x in "abc" for y in range(3)]
list3 = [{x:y} for x in "abc" for y in range(3)]

print(list1)
print(list2)
print(list3)

输出为:

[(‘a‘, 0), (‘a‘, 1), (‘a‘, 2), (‘b‘, 0), (‘b‘, 1), (‘b‘, 2), (‘c‘, 0), (‘c‘, 1), (‘c‘, 2)]
[[‘a‘, 0], [‘a‘, 1], [‘a‘, 2], [‘b‘, 0], [‘b‘, 1], [‘b‘, 2], [‘c‘, 0], [‘c‘, 1], [‘c‘, 2]]
[{‘a‘: 0}, {‘a‘: 1}, {‘a‘: 2}, {‘b‘: 0}, {‘b‘: 1}, {‘b‘: 2}, {‘c‘: 0}, {‘c‘: 1}, {‘c‘: 2}]

示例2:

#以下三种输出一样,但推荐使用第一种方法,效率更高
list1 = [(i,j) for i in range(7) if i>4 for j in range(20,25) if j >23]
list2 = [(i,j) for i in range(7) for j in range(20,25) if i>4 if j >23]
list3 = [(i,j) for i in range(7) for j in range(20,25) if i>4 and j >23]

print(list1)
print(list2)
print(list3)

输出结果为:

[(5, 24), (6, 24)]
[(5, 24), (6, 24)]
[(5, 24), (6, 24)]

复杂示例

返回1-10的平方列表

l1 = [ i**2 for i in range(1,11)]

有一个列表list = [1,4,9,16,2,5,10,15],生成一个新列表。要去新列表元素是lst相邻2项的和

lst = [1,4,9,16,2,5,10,15]
l2 = [lst[i]+lst[i+1] for i in range(len(lst)-1)]

用列表解析式方法打印九九乘法表:

[print(‘{}*{}={:<3}‘.format(j,i,j*i),end=‘\n‘ if i == j else ‘‘) for i in range(1,10) for j in range(1,i+1)]

原文地址:https://www.cnblogs.com/rivendare/p/9493698.html

时间: 2024-11-13 08:55:11

列表解析式的相关文章

Python - 列表解析式

列表解析--用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, 1, 4, 9, 16, 25] [x**2 for x in range(6)] [0, 1, 4, 9, 16, 25] 列表解析式可以取代内建的map()函数以及lambda,而且++效率更高++. 例子二: seq = [11, 10, 9, 8, 7, 6] filter(lambda x

列表解析式 -- Python

列表解析的语法:[expr for iter_var in iterable], 它迭代iterable对象的所有条目.其中的expr应用于序列的每个成员,最后的结果值是该表达式产生的列表,迭代变量并不需要是表达式的一部分. #!usr/bin/env python #coding:utf-8 ''' 需求:找出出1-10内所有的奇数,并将奇数求平方 ''' print(tuple((i for i in range(11) if i%2))) print(list((i*i for i in

轻松学会Python列表解析式(转载)

有时候,一个编程设计模式使用得十分普遍,甚至会逐步形成自己独特的语法.Python编程语言中的列表解析式(list comprehension)就是这类语法糖(syntactic sugar)的绝佳代表. Python中的列表解析式是个伟大的发明,但是要掌握好这个语法则有些难,因为它们并是用来解决全新的问题:只是为解决已有问题提供了新的语法. 接下来,我们一起来学习什么是列表解析式,以及如何掌握使用这种语法的时机. 什么是列表解析式? 列表解析式是将一个列表(实际上适用于任何可迭代对象(iter

Python - 列表解析式/生成器表达式

列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_expr) 二者的区别: -列表解析式需要生成所有的数据: -生成器解析式不是真正创建列表,而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目yield出来.生成器表达式使用了延迟计算,在使用内存上更有效.

python列表解析式与生成式表达式

一.列表解析式 语法: [返回值 for 元素 in 可迭代对象 if 条件] 使用中括号[],内部是for循环,if条件语句可选 返回一个新的列表 列表解析式是一种语法糖,编译器会优化,不会因为简写而影响效率,反而因优化提高了效率,减少程序员工作量,减少出错 ,简化了代码,但可读性增强 [expr for item in iterable if cond1 if cond2] 与[expr for item in iterable if cond1 and cond2] 等价 例:有一个列表l

Python列表解析式

列表解析式 列表解析式的语法:[返回值 for 元素 in 可迭代对象 if 条件],使用中括号[],内部是for循环,if条件语句可选,返回一个新的列表 .列表解析式是一种语法糖,编译器会优化,不会因为简写而影响效率,反而因优化提高了效率.减少程序员工作量,减少出错.简化了代码,但可读性增强.比如要生成一个列表,元素0~9,对每一个元素自增1后求平方返回新列表,下面看不用列表解析式和用列表解析式的代码. #不用列表解析式 l1 = list(range(10)) l2 = [] for i i

函数 装饰器 生成器 列表解析式

# c = a if a>b else b #三元运算 def func(name,*args,name1='name1',**kwargs): # 如果默认参数的值是一个可变数据类型,那么每一次调用函数且对其进行增删改的时候,如果不传值就公用这个数据类型的资源 return 's' # 可以元组方式返回多个值,也可以单独返回字符串列表字典等 func(name,) # ret = func()多个值之间用逗号隔开,接收的时候可以用一个变量接收(元组),也可以用等量的多个变量接收 func(*[

python之列表解析

列表解析:是指在原列表的基础之上生成新的列表 列表解析式生成列表,通过for循环也可以实现,优势在于列表表达式比for循环快. 列表解析表达式: 表达式一 [expression for iter_var in iterable] 将迭代对象(iterable)中的值赋给iter_var,并执行expression 例: >>> a = [1,2,3,4,5] >>> b = [i**2 for i in a] >>> b [1, 4, 9, 16,

list comprehensions列表解析

没有使用列表解析: 1 x =[] 2 for i in (1, 2, 3): 3 x.append(i) 4 5 """ 6 >>> x 7 [1, 2, 3] 8 """ 列表解析式: 1 x = [i for i in (1, 2, 3)] 2 """ 3 >>> x 4 [1, 2, 3] 5 """ 多重列表解析: 1 x = [word.c