python之eval函数,map函数,zip函数

eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果。所以,结合math当成一个计算器很好用。

eval()函数常见作用有:
1、计算字符串中有效的表达式,并返回结果

>>> eval(‘pow(2,2)‘)
4
>>> eval(‘2 + 2‘)
4
>>> eval("n + 4")
85

2、将字符串转成相应的对象(如list、tuple、dict和string之间的转换)

>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>> b = eval(a)
>>> b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> a = "{1:‘xx‘,2:‘yy‘}"
>>> c = eval(a)
>>> c
{1: ‘xx‘, 2: ‘yy‘}
>>> a = "(1,2,3,4)"
>>> d = eval(a)
>>> d
(1, 2, 3, 4)

3、将利用反引号转换的字符串再反转回对象

>>> list1 = [1,2,3,4,5]
>>> `list1`
‘[1, 2, 3, 4, 5]‘
>>> type(`list1`)
<type ‘str‘>
>>> type(eval(`list1`))
<type ‘list‘>
>>> a = eval(`list1`)
>>> a
[1, 2, 3, 4, 5]

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

举例说明,比如我们有一个函数f(x)=x%2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现

#使用lambda函数

>>> print map(lambda x: x % 2, range(7))

[0, 1, 0, 1, 0, 1, 0]

一个最简单的例子,如基于f(x) = x2,map()作用于list [1, 2, 3, 4, 5, 6, 7, 8, 9]后的结果如下:返回结果仍为list

以前使用zip ,只用过最简单的,合并两个列表,没有仔细深究过,后来在实验楼 做实验的时候,遇到了这样的一行代码:

[list(row) for row in zip(*field)]     #field 是一个矩阵

zip()的基本使用方法

首先看help(zip)

Help on built-in function zip in module __builtin__:

zip(...)
    zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]

    Return a list of tuples, where each tuple contains the i-th element
    from each of the argument sequences.  The returned list is truncated
    in length to the length of the shortest argument sequence.
None

大意就是:

定义:zip([seql, …])接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。

通俗点就是把几个列表(0或者1或者多个)的对应位置的元素组成新的tuple, 这些新的tuple 构成一个list.
直接用几个例子来说明:

示例

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

xyz = zip(x, y, z)

print xyz

‘‘‘结果是:‘‘‘
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
#对应元素组成一个新的元组,元组构成列表
#---------------------------------------#

#无参数时,
x = zip()
print x

#结果是:
[]

#---------------------------------------#

#长度不等时,取长度的最小的

x = [1, 2, 3]
y = [‘a‘, ‘b‘, ‘c‘, ‘d‘]
xy = zip(x, y)
print xy

#结果是:
[(1, ‘a‘), (2, ‘b‘), (3, ‘c‘)]

常用的方法


#可变参数传递的使用(很常用一种用法),这个可以用矩阵的转置o~如下:实验
#楼的那代码就是转置矩阵

x = [[1,2,3],
     [4,5,6],
     [7,8,9]]
y = zip(*x)
print y

#结果是:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

#转置就是:
map(list, y)
 #这种也经常这样使用: 压缩与解压缩

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

xyz = zip(x, y, z) res = zip(*xyz)
print res

#结果可想而知, 压缩之后 在解压缩:
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

‘‘‘‘‘‘
 #还有就是字典的构造也经常使用:

x = [‘a‘, ‘b‘, ‘c‘]
y = [‘x‘, ‘y‘, ‘z‘]
z = zip(x, y)
d = dict(z)
print d

#结果为:
{‘a‘: ‘x‘, ‘c‘: ‘z‘, ‘b‘: ‘y‘}

‘‘‘‘‘‘
#------------------------------#
#与iter合用:

a = [1, 2, 3, 4, 5, 6]
b = zip(*([iter(a)] * 2))
print b

#结果是:
[(1, 2), (3, 4), (5, 6)]
时间: 2024-11-08 20:29:05

python之eval函数,map函数,zip函数的相关文章

python的reduce,map,zip和filter函数

一.    reduce(function,Iterable),它的形式和map()函数一样.不过参数function必须有两个参数. reduce()函数作用是:把结果继续和序列的下一个元素做累积计算. 例,        >>>def add(x, y) :            # 两数相加    ...     return x + y    ...     >>> reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5    

python(29)强大的zip函数

zip函数:它是python的内建函数,(与序列有关的内建函数有:sorted().reversed().enumerate().zip()),其中sorted()和zip()返回一个序列(列表)对象,reversed().enumerate()返回一个迭代器(类似序列) 代码一: >>> name = ("lilei","lihua","zhang") >>> age = ("21",&q

python---------匿名函数(map,filter,zip..)

python---------匿名函数 一.匿名函数:也叫lambda表达式 1.匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行 2.参数可以有多个,用逗号隔开 3.返回值和正常的函数一样可以是任意的数据类型 二.匿名函数练习 1 请把下面的函数转换成匿名函数 2 def add(x,y) 3 return x+y 4 add() 5 结果: 6 sum1=lambda x,y:x+y 7 print(sum1(5,8)) 1 dic = {'k1':50,'k2':

Python的range、enumerate和zip函数用法

range函数可创建一个整数列表.如果需要知道当前元素在列表中的索引,推荐用enumerate代替range.zip函数用于同时遍历多个迭代器. 一.range 函数 range函数可创建一个整数列表,一般用在 for 循环中. 语法: range([start,] stop[, step]) 参数: start: 计数从 start 开始.默认是从 0 开始.例如range(5)等价于range(0,5); stop: 计数到 stop 结束,但不包括 stop.例如:range(0,5) 是

Python---高级函数map, filter, zip, enumerate等的用法

今天看自然语言处理这本书的时候,被这里的高级函数的概念吸引了,因为我觉得所有的函数都只是函数而已,是为了实现特定功能而实现的,不应该有高级,低级之分啊!不过了解之后,发现这几个函数确实是有点高级,非常好用,所以在这里做一个简单的总结. 1. Haskell:之前以为它是一个函数,其实它是一个统称.Haskell 中的函数可以作为参数和回传值传来传去,这样的函数就被称作高阶函数. 2. map(function, list): 就是对list 中的每一个元素都调用function函数进行处理,返回

Effective Python 小笔记之 zip 函数

环境:Python 3.5.1 CentOS 7 zip函数可以同时遍历两个迭代器. 在编写Python代码时,通常要面对很多列表,而这些列表中的对象,可能是相互关联的.如下例:     names = ['Cecilia', 'Lily', 'Maria']     length = [len(word) for word in names] 对于上例中的源列表和派生列表,相同索引处有关联关系,以此再引申出一个例子:     longest_name = None     max_length

Python自学笔记-map和reduce函数(来自廖雪峰的官网Python3)

感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. Python内建了map()和reduce()函数. 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3,

Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 而函数式编程(请注意多了一个"式"字)--Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算. 我们首先要搞明白计算机(Computer)和计算(Compute)的概念. 在计算机的层次上,CPU执行的是加减乘除的指令代码

python 高阶函数map/reduce

Python内建了map()和reduce()函数. map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 1 def f(x): 2 return x*x 3 r = map(f, [1,2,3,4,5,6]) 4 print(r) 5 print(list(r)) Output: <map object at 0x00000269FA005E10> [1, 4, 9, 16, 25, 36] re

python笔记--3--函数、生成器、装饰器、函数嵌套定义、函数柯里化

函数 函数定义语法: def 函数名([参数列表]): '''注释''' 函数体 函数形参不需要声明其类型,也不需要指定函数返回值类型 即使该函数不需要接收任何参数,也必须保留一对空的圆括号 括号后面的冒号必不可少 函数体相对于def关键字必须保持一定的空格缩进 Python允许嵌套定义函数 在定义函数时,开头部分的注释并不是必需的,但是如果为函数的定义加上这段注释的话,可以为用户提供友好的提示和使用帮助. Python是一种高级动态编程语言,变量类型是随时可以改变的.Python中的函数和自定