likes
comments
collection
share

Python教程 - 内置的迭代对象操作函数

作者站长头像
站长
· 阅读数 57

这篇文章会介绍了Python语言中用于迭代对象的内置函数,熟悉这些函数后,就能够轻松掌握迭代对象的转换和操作。

list(x)

list(x)  可以创建空列表,或将“字符串、元组、字典或集合”转换成列表。

a = '12345'
b = (1,2,3,4,5)
c = {1,2,3,4,5,'x','y','z'}
d = {'x':'1','y':'2','z':'3'}
print(list(a))    # ['1''2''3''4''5']
print(list(b))    # [1, 2, 3, 4, 5]
print(list(c))    # [1, 2, 3, 4, 5, 'z''y''x']
print(list(d))    # ['x''y''z']

dict(x)

dict(x) 可以创建空字典,或将“带有键与值、两个值的二维列表或元组、双字符的字符串串列或元组”转换成字典。

a = dict(name='oxxo', age=18, eat=['apple','banana'])
b = dict([['x','100'],['y','200'],['z','300']])
c = dict(['ab','cd','ef'])
print(a)    # {'name': 'oxxo''age'18'eat': ['apple''banana']}
print(b)    # {'x': '100''y''200''z''300'}
print(c)    # {'a': 'b''c''d''e''f'}

set(x)

set(x) 可以创建空集合,或将“列表、元组、字符串或字典”转换成集合。

a = set()
b = set([1,2,3,4,5,1,2,3,4,5])
c = set({'x':1,'y':2,'z':3})
d = set('hello')
print(a)   # set()
print(b)   # {12345}  只留下不重复的部分
print(c)   # {'x''y''z'}  如果是字典,只保留键
print(d)   # {'l''o''h''e'}  只留下不重复的部分

frozenset(x)

frozenset(x) 可以创建一个“不可变”的集合,创建方式和set()完全相同(frozenset字面意思就是冻结的set)。

a = frozenset()
b = frozenset([1,2,3,4,5,1,2,3,4,5])
c = frozenset({'x':1,'y':2,'z':3})
d = frozenset('hello')
print(a)   # frozenset()
print(b)   # frozenset({12345})
print(c)   # frozenset({'x', 'z', 'y'})
print(d)   # frozenset({'e', 'h', 'l', 'o'})

tuple(x)

tuple(x) 可以创建空元组,或将“列表、集合、字符串或字典”转换成元组。

a = tuple([1,2,3,4,5])
b = tuple('12345')
c = tuple({'1','2','3','4','5'})
d = tuple({'x':'1','y':'2','z':'3'})
print(a)    # (12345)
print(b)    # ('1''2''3''4''5')
print(c)    # ('4''2''3''1''5')
print(d)    # ('x''y''z')

enumerate(x, start=y)

enumerate() 可以将“列表、集合、元组、字典”创建为可迭代并附加索引值的enumerate对象,start的数值代表索引值开始的数字,默认从0开始(不填写默认0)。

a = enumerate(['a','b','c'])
b = enumerate(('a','b','c'))
c = enumerate({'a','b','c'})
d = enumerate({'a':1,'b':2,'c':3}, start=2)
print(a)          # <enumerate object at 0x7f8de8677050>
print(list(a))    # [(0, 'a'), (1, 'b'), (2, 'c')]
print(list(b))    # [(0, 'a'), (1, 'b'), (2, 'c')]
print(list(c))    # [(0, 'a'), (1, 'b'), (2, 'c')]
print(list(d))    # [(2, 'a'), (3, 'b'), (4, 'c')] 设定 start=2,第一项的索引值变成 2

iter(x)

iter() 可以将“列表、集合、元组、字典”创建为可迭代的iter对象,下方程序可以看到不同形态的iter对象。

a = iter([1,2,3])
b = iter((1,2,3))
c = iter({'a','b','c'})
d = iter({'a':1,'b':2,'c':3})
print(a)    # <listiterator object at 0x7f8de866e450>
print(b)    # <tupleiterator object at 0x7f8de866ec90>
print(c)    # <setiterator object at 0x7f8de86c0910>
print(d)    # <dictkeyiterator object at 0x7f8de86ec7d0>

next(x)

next() 通常和iter()与enumerate()搭配,可以将enumerate和iter对象的内容“依次取出并移除”,每执行一次就取出一个,直到完全取出为止。

a = enumerate(['a','b','c'])
print(next(a))    # (0, 'a')
print(next(a))    # (1, 'b')
print(next(a))    # (2, 'c')
print(list(a))    # []    # 全部取出后只剩下空列表

b = iter(['a','b','c'])
print(next(b))    # a
print(next(b))    # b
print(next(b))    # c
print(list(b))    # []    # 全部取出后只剩下空列表

range(start, stop, step)

range(start, stop, step) 可以产生一个「整数序列」,产生后可通过list()、tuple()之类的方法转换成对应的类型。

参数说明
start起始数字
stop结束数字 - 1
step步长,可不填,默认 1
a = range(1,5)
b = range(1,100,10)
c = range(5,-5,-1)
print(list(a))   # [1, 2, 3, 4]
print(list(b))   # [1, 11, 21, 31, 41, 51, 61, 71, 81, 91]
print(list(c))   # [5, 4, 3, 2, 1, 0, -1, -2, -3, -4]

range() 经常出现在一些循环的例子中,下面的例子,会打印出 10 以内的奇数。

for i in range(1,10,2):
  print(i)   # 1 3 5 7 9

len(iter)

len(x) 可以获取序列、字典、集合、元组的长度,也可以获取字符串的长度。

a = [1,2,3,4,5]
b = (1,2,3,4,5)
c = {'x','y','z'}
d = {'a':1,'b':2,'c':3,'d':4}
e = 'apple'
print(len(a))    # 5
print(len(b))    # 5
print(len(c))    # 3
print(len(d))    # 4
print(len(e))    # 5

map(function, iter)

map() 可以使用指定的函数,依次处理可迭代对象的每个项,处理后产生一个全新的对象。下面的程序使用了同样效果的具名函数a和匿名函数lambda,将原本 [1,2,3,4,5] 序列里每个项都增加 1,最后转换成列表和元组。

map() 会将第二个参数的可迭代对象,提供给第一个参数的函数作为参数使用。

def a(x):
    return x+1
b = map(a, [1,2,3,4,5])
c = map(lambda x: x+1, [1,2,3,4,5])

print(list(b))    # [2, 3, 4, 5, 6]
print(tuple(c))   # (2, 3, 4, 5, 6)

下面的例子,a 为一个字符串序列,通过 map() 的方式可以快速的将 a 转换为数字序列。

a = ['1''2''3' ,'4''5']
print(a)                # ['1''2''3' ,'4''5']

b = list(map(int, a))   # 取出 a 的每个项,应用 int(项),组成新对象
print(b)                # [1, 2, 3, 4, 5]

因为 map 返回的是一个可迭代对象,所以也可以将其赋值给变量,下面的例子,使用 map 将一个字符串的序列内容,分别赋值给 a 和 b 两个变量。

t = ['12''34']
ab = map(int, t)
print(a)    # 12
print(b)    # 34

filter(function, iter)

filter() 可以使用指定的函数,依次判断可迭代对象的每个项,将判断结果为True的对象集合成一个全新的对象,下面程序使用了同样效果的具名函数a和匿名函数lambda,判断 [1,2,3,4,5] 序列里的每个项,如果数值大于2就取出成为新对象,最后转换成列表和元组。

def a(x):
  return x>2
b = filter(a, [1,2,3,4,5])
c = filter(lambda x: x>2, [1,2,3,4,5])

print(list(b))    # [3, 4, 5]
print(tuple(c))   # (3, 4, 5)

sorted(x, key=None, reverse=False)

sorted 可以将可迭代对象进行排序,并产生一个全新的对象。

参数说明
x可迭代的对象,例如列表、字符串、元组、字典、集合
key可不填,默认由第一个项判断(如果有多层内容),也可指定判断的项
reverse可不填,默认False从小到大,设置True表示从大到小
a = [1,5,3,4,2]
b = sorted(a)
c = sorted(a, reverse=True)

print(list(b))   # [1, 2, 3, 4, 5]
print(list(c))   # [5, 4, 3, 2, 1]

下面程序的 a 是一个二维的列表,使用 key 来让排序以第二个项作为依据,例子中使用具名函数test和lambda函数,都是一样的效果。

a = [[1,8],[2,1],[5,2],[3,5],[9,3]]
b = sorted(a, key=lambda x: x[1])

def test(x):
  return x[1]

c = sorted(a, key=test)

print(list(b))   # [[2, 1][5, 2][9, 3][3, 5][1, 8]]
print(list(c))   # [[2, 1][5, 2][9, 3][3, 5][1, 8]]

reversed(x)

reversed() 可以将有顺序性的对象(字符串、列表和元组)内容反转,产生一个全新的对象。

a = [1,2,3,4,5]
b = (1,2,3,4,5)
c = '12345'

print(list(reversed(a)))   # [5, 4, 3, 2, 1]
print(list(reversed(b)))   # [5, 4, 3, 2, 1]
print(list(reversed(c)))   # ['5''4''3''2''1']

all(x)

all() 可以判断一个可迭代对象里,是否不包含False相关的元素(只要是0、空白、False都属于False元素),如果不包含或「空对象」就会返回True,如果包含就会返回False。

a = [1,2,3,4,5]
b = [0,1,2,3,4,5]
c = ['x','y','z','']
d = []

print(all(a))    # True
print(all(b))    # False
print(all(c))    # False
print(all(d))    # True

any(x)

any() 可以判断一个可迭代对象里,是否包含了True相关的元素(只要不是0、空白、False都属于True元素),如果包含就会返回True,反之不包含就会返回False。此外,如果是「空」的对象,会返回False。

a = [1,2,3,4,5]
b = [0,1,2,3,4,5]
c = ['x','y','z','']
d = []

print(any(a))    # True
print(any(b))    # True
print(any(c))    # True
print(any(d))    # False

slice(start, stop, step)

slice(start, stop, step) 可以「定义切片范围」,当指定的可迭代对象套用范围后,就会取出范围内的项,变成新的对象。

参数说明
start起始数字
stop结束数字 - 1
step可不填,数字间隔,预设 1
a = slice(2,6)
b = slice(2,6,2)
c = [1,2,3,4,5,6,7,8,9]

d = c[a]
e = c[b]
print(d)      # [3, 4, 5, 6]
print(e)      # [3, 5]

zip()

zip() 可以将指定的可迭代对象,打包成一个新对象,新对象的长度与「最短」的一致。下方的例子将 a、b、c 三个列表打包,最后使用 list() 转换成列表。

a = [1,2,3,4]
b = [5,6,7]
c = [8,9]
d = zip(a, b, c)
print(list(d))    # [(1, 5, 8), (2, 6, 9)]

转载自:https://juejin.cn/post/7370138993063166004
评论
请登录