专业编程基础技术教程

网站首页 > 基础教程 正文

Python 序列切片 反序 zip操作和超好用的enumerate函数 (10)

ccvgpt 2024-08-06 12:39:35 基础教程 13 ℃

Python 序列中的切片

通过切片标记法,可以选取序列类型(数组、元组、Numpy数组等)的子集,其基本形式由索引运算符([])以及传入

Python 序列切片 反序 zip操作和超好用的enumerate函数 (10)

其中的start:stop构成,start或stop都是可以省略的,此时默认序列的起始处和结尾处

In [74]: seq = [2, 3, 6, 1, 5, 8]

In [75]: seq[1:5]

Out[75]: [3, 6, 1, 5]

In [77]: seq[2:]

Out[77]: [6, 1, 5, 8]

In [78]: seq[:5]

Out[78]: [2, 3, 6, 1, 5]

In [79]: seq[0]

Out[79]: 2

基本样式[下限:上限:步长]

In [89]: seq = [2, 3, 6, 1, 5, 8, 9, 10]

In [90]: seq

Out[90]: [2, 3, 6, 1, 5, 8, 9, 10]

####[3:4]包含3不包含4,在这个位置往后插值。

In [91]: seq[3:4] = [1, 2]

In [92]: seq

Out[92]: [2, 3, 6, 1, 2, 5, 8, 9, 10]

In [93]: seq[3:5] = [11, 12, 14]

In [94]: seq

Out[94]: [2, 3, 6, 11, 12, 14, 5, 8, 9, 10]

In [95]: seq[2:8:2]

Out[95]: [6, 12, 5]

##负数索引从序列的末尾开始切片:

In [98]: seq

Out[98]: [2, 3, 6, 1, 2, 18, 19, 20, 12, 14, 5, 8, 9, 10]

In [99]: seq[-1]

Out[99]: 10

In [101]: seq[-4:-2]

Out[101]: [5, 8]

##利用seq[::-1]实现反序

In [102]: seq[::-1]

Out[102]: [10, 9, 8, 5, 14, 12, 20, 19, 18, 2, 1, 6, 3, 2]

##内置的序列函数enumerate(平分),可以逐个返回序列的(i,value)元组

## i代表索引项,value代表当前索引想的值

In [103]: seq

Out[103]: [2, 3, 6, 1, 2]

In [105]: for i, value in enumerate(seq):

...: print i, value

0 2

1 3

2 6

3 1

4 2

##对数据进行索引时,enumerate还有一种不错的使用模式,即求取一个将序列值映射到其所在位置的字典

In [106]: l = ['he', 'I', 'she']

In [107]: mapping = dict((v, i) for i, v in enumerate(l))

In [108]: mapping

Out[108]: {'I': 1, 'he': 0, 'she': 2}

##sorted()函数可以将任何序列返回为一个新的有序列表:

In [109]: l = [1,0,9,3,8,2,5,3,5,4,6,98]

In [110]: sorted(l)

Out[110]: [0, 1, 2, 3, 3, 4, 5, 5, 6, 8, 9, 98]

In [112]: sorted('mylove string')

Out[112]: [' ', 'e', 'g', 'i', 'l', 'm', 'n', 'o', 'r', 's', 't', 'v', 'y']

##常常将sorted和set结合起来使用以得到一个 由序列中的唯一元素组成的有序列表:

In [113]: sorted(set('this is my love'))

Out[113]: [' ', 'e', 'h', 'i', 'l', 'm', 'o', 's', 't', 'v', 'y']

##zip操作 用于将多个序列(列表、元组等)中的元素 配对,从而产生一个新的元组列表:

In [114]: seq1 = ['I', 'He', 'She']

In [115]: seq2 = [1, 2, 3]

In [116]: zip(seq1, seq2)

Out[116]: [('I', 1), ('He', 2), ('She', 3)]

##zip可以接受任意数量的序列,最终得到的元组数量由最短的序列决定

In [114]: seq1 = ['I', 'He', 'She']

In [115]: seq2 = [1, 2, 3]

In [117]: seq3 = ['one', 'two']

In [118]: zip(seq1, seq2, seq3)

Out[118]: [('I', 1, 'one'), ('He', 2, 'two')]

##zip常见的用法 是同时迭代多个序列,还可以结合enumerate一起使用:

In [119]: seq1

Out[119]: ['I', 'He', 'She']

In [120]: seq2

Out[120]: [1, 2, 3]

In [121]: for i, (a, b) in enumerate(zip(seq1, seq2)):

...: print('%d: %s, %s' %(i, a, b))

...:

0: I, 1

1: He, 2

2: She, 3

##对于"已压缩的"(zipped)序列,zip还可以对该序列进行"解压"(unzip)

##即就是将一组行转换为一组列。

In [127]: l

Out[127]: [('I', 1), ('He', 2), ('She', 3)]

## zip(*l) 相当于zip(l[0], l[1], l[2], ..., seq[len(seq) - 1])

In [128]: s1, s2 = zip(*l)

In [129]: s1

Out[129]: ('I', 'He', 'She')

In [130]: s2

Out[130]: (1, 2, 3)

##reversed 按逆序迭代序列中的元素

In [131]: list(reversed(range(10)))

Out[131]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

最近发表
标签列表