Python切片简单使用

Python切片(针对List和Tuple常见的操作)

1.切片

首先定义List=[1,2,3,4,5,6,7,8,9,10]

  • List[0:3] 表示取前面三个元素,索引是从0-3,即List[0],List[1],List[2],默认步长是1
  • List[0:3:2] 和上面的类似,只是步长是2
  • List[start,end,step] start:起始索引,end终止索引,step步长
  • List[-1]表示最后一个元素
  • List[-10:2] 表示取后面10个元素,步长是2

Tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple。

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)
字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'

2. 迭代

grade = {'a':99, 'b':100, 'c':88}
for key1 in grade: # 如果对dict进行迭代操作的时候默认是迭代的是key
print(key1)

for value in grade.values(): # 如果想要迭代是dict里面的值的时候,需要使用dict.values()内部函数
print(value)

for key,value in grade.items(): # 如果想要输出key和value的值,可以使用内部函数items()函数
print("%s: 'valuse'=%s" % (key, value))

2.1 如何判断一个对象是不是可迭代对象了?

可以通过导入Iterable中isinstance()函数来进行判断是否为迭代对象

from collections import Iterable

print(isinstance('abs', Iterable)) Ture
print(isinstance(133,Iterable))   False

2.2 如何实现像Java中那样的有下标迭代(可借助enumerate)

for i, value in enumerate(['a', 'b', 'c']): # 可以利用enumerate()函数进行完成此操作
print(i, value)

2.3 Python可以同时输出二个数或者多个数

>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
... print(x, y)
...
1 1
2 4
3 9

3. 列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:这个十分强大的

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

通过这个可以直接输出小写的字母,十分方便

>>> [s.lower() for s in ['ADDF','AA']]
['addf', 'aa']

4. 生成器

如果我们需要产生一个100万元素的列表,但是现在我们仅仅需要前面几个元素,那么产生一个后面绝大部分元素都浪费了,得不尝试。那么我们可以借助一个生成器来帮助我们。生成器是边计算边进行循环的,所以他是相当于进行一步步递推迭代的,节约空间。要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

接下来我们可以使用.next()函数一个一个进行调用

5. 迭代器

  • 凡是可作用于for循环的对象都是Iterable类型;

  • 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
    集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。Python的for循环本质上就是通过不断调用next()函数实现的。

参考文章

  1. 廖雪峰的python教程

猜你喜欢

转载自blog.csdn.net/alxe_made/article/details/80485542