python学习——高级特性

原创 2018年04月16日 17:42:47

1、切片

取一个list或tuple的部分元素是非常常见的操作,我们可以用下标也可以用循环,这些方法有时候会很繁锁,Python提供了切片(Slice)操作符

L=['Michael','Sarah','Tracy','Bob','Jack']
M=list(range(100))
N=(0,1,2,3,4,5,)
K='ABCDEFG'
print(L[0:3])  #从索引0开始取,直到索引3为止,但不包括索引3
print(L[:3])   #如果第一个索引是0,还可以省略
print(L[1:3])
print(L[-2:])  #???没搞懂,先写上
print(L[-2:-1]) #倒数第一个元素的索引是-1
print(M[10:20])  #从第11个元素到20个元素
print(M[:10:2]) #前10个每两个取一个
print(M[::5]) #每5个取一个
print(M[:])  #全部取出 
print(N[:3]) #tuple取前三个,结果仍然是一个tuple
print(K[:3]) #字符串切片取前三个,结果仍然是一个字符串

执行结果:

['Michael', 'Sarah', 'Tracy']
['Michael', 'Sarah', 'Tracy']
['Sarah', 'Tracy']
['Bob', 'Jack']
['Bob']
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 2, 4, 6, 8]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
(0, 1, 2)

ABC


2、迭代:如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)

for循环不仅可以用到list上和tuple上,还可以用到其它可迭代的对象上

dict迭代:

d={'a':1,'b':2,'c':3}
for key in d:
    print(key)   #打印key的值,可能不会按a,b,c的顺序,不是按照List的方式顺序存取
for value in d.values():
    print(value) #打印value的值
for k,v in d.items():
    print(k,v) #同时打印key和value

执行结果:

a
b
c
1
2
3
a 1
b 2

c 3

字符串迭代:

for ch in 'ABC':
    print(ch)

执行结果:

A
B

C

当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行

通过collections模块的Iterable类型判断对象是否是可迭代对象:

from collections import Iterable
print(isinstance('abc',Iterable))
print(isinstance('123',Iterable))
print(isinstance(123,Iterable))#整数不可迭代

执行结果:

True
True

False

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

for i,value in enumerate (['A','B','C','D']):
    print(i,value)

执行结果:

0 A
1 B
2 C

3 D

3、列表生成式

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

L=list(range(1,11))
print(L)

执行结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

计算[1x1, 2x2, 3x3, ..., 10x10]

L=[]
for x in range(1,11):
    L.append(x*x)
print(L)
M=[x*x for x in range(1,11)]  #列表生成式
print(M)

执行结果:

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

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


把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

L=[x*x for x in range(1,11) if x%2==0]  #列表生成式
print(L)

执行结果:

[4, 16, 36, 64, 100]

用两层循环,可以生成全排列:

K=[m+n for m in 'ABC' for n in 'XYZ']
print(K)

执行结果:

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

d={'X':'A','y':'B','z':'C'}
for k,v in d.items():
    print(k,'=',v )
L=[k+'='+v for k,v in d.items()]
print(L)

执行结果:

X = A
y = B
z = C

['X=A', 'y=B', 'z=C']

把list里面的字母都变成小写:

R=['Hello','World']
M=[s.lower() for s in R]
print(M)

执行结果:

['hello', 'world']

4、生成器:这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

L=[x*x for x in range(10)]
print(L)
g=(x*x for x in range(10))
print(next(g))
print(next(g))
print(next(g))

执行结果:

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

4

创建Lg的区别仅在于最外层的[]()L是一个list,而g是一个generator,可以通过next()函数获得generator的下一个返回值

改造后的程序:

L=[x*x for x in range(10)]
print(L)
g=(x*x for x in range(10))
for n in g:
    print(n)

执行结果:

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

81




Java高级特性-难点汇总

Java 数据结构(Java 2之前)(高级) Java工具包提供了强大的数据结构,主要是以下几种: 枚举(Enumeration)位集合(BitSet)向量(Vector)栈(Stack)字典(Di...
  • redbelt
  • redbelt
  • 2017-03-18 21:29:03
  • 249

【学习总结】java高级特性之四种JAVA内部类总结

标题:java内部类 内部类:在JAVA中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、静态内部类、局部内部类、匿名内部类。 ...
  • heccmm
  • heccmm
  • 2016-12-20 18:13:53
  • 438

《深入理解Java虚拟机——JVM高级特性与最佳实践》学习笔记——程序编译与代码优化(一)

早期(编译期)优化Javac的编译过程 解析与填充符号表过程 插入式注解处理器的注解处理过程 分析与字节码生成过程 Javac编译动作的入口是com.sun.tools.javac.main.Java...
  • benhuo931115
  • benhuo931115
  • 2017-03-30 11:31:15
  • 963

ASP.NET MVC学习---(二)EF文件结构

之前已经简单的介绍过ORM框架和EF 那么
  • qq1010885678
  • qq1010885678
  • 2014-07-30 20:54:32
  • 2649

python的一些高级特性

目录:     1.slice切片     2.迭代     3.列表生成式     4.生成器(generator)     5.迭代器(Iterato...
  • qq_28057577
  • qq_28057577
  • 2017-12-12 16:50:28
  • 105

Python之高级特性(1)

一、迭代 可以通过for循环来遍历这个list或tupel,这种遍历我们称为迭代 如何判断一个对象是可迭代对象: 通过collections模块的Iterable类型判断;返回bool值 除了整形...
  • Wk_yyy
  • Wk_yyy
  • 2018-04-03 11:22:11
  • 11

Java 高级特性: Lambda 表达式(第 1 季)

Lambda 表达式是 java 8 的新特性,本质是一个函数式接口( functional interface )的实现类的实例,Lambda 表达式从匿名类发展而来。函数式接口只有一个抽象方法,为了实现这个抽象方法,我们要为之创建匿名实现类,这样显得很笨拙和不清晰。在这样的情景中,使用 Lambda 表达式替换匿名类,你将会看到更加简洁和可读性更好的代码。
  • 2017年09月14日 13:54

Python高级特性知识点回顾(参考廖雪峰的官方网站)

一.高级特性1.切片        用来取list或者tuple元素: L[0:3]; #取得前三 L[:3]; #取得前三 L[-10:]; #取得后十...
  • qq_23291793
  • qq_23291793
  • 2018-03-19 20:25:37
  • 35

java高级特性

第六天: 教学任务:         第六章  高级特性, 共 39 个slide(132-171); 目标: -------------------------------...
  • jakeswang
  • jakeswang
  • 2016-01-25 11:10:20
  • 645

spring学习笔记:ioc容器高级特性

Spring容器的高级特性涉及到属性编辑器,使用外部属性文件,国际化,容器事件等等; 今天讲解一下属性编辑器,使用外部资源,国际化。属性编辑器  如果你没有了解过属性编辑器,建议你先google一下,...
  • sunxing007
  • sunxing007
  • 2009-08-11 11:00:00
  • 2881
收藏助手
不良信息举报
您举报文章:python学习——高级特性
举报原因:
原因补充:

(最多只允许输入30个字)