马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ~风介~ 于 2015-10-27 16:10 编辑
先贴一个stackoverflow上的问题:
I have a two list of tuple as follows.I want to print this tuples separated by ‘|’.How an I achieve this.
- listoftuple =[(1,2),(3,4),(5,6)]
- listoftuple1 =[(3,4,5),(5,6,7),(9,0,9)]
复制代码
I want the result to be printed as follows:
- 1|2 3|4 5|6
- 3|4|5 5|6|7 9|0|9
复制代码
2 Answers:
- >>> " ".join(map(lambda x: "|".join(map(str, x)), listoftuple1))
- '3|4|5 5|6|7 9|0|9'
复制代码
***********************我的问题***********************
现有元组t1
- >>> t1 = ((3,5),(4,5),(5,9))
复制代码
想要变成以下形式:
以下代码为什么会报错?
- ' '.join(map(lambda x:map(str, x), t1))
复制代码
报错信息:
- Traceback (most recent call last):
- File "<pyshell#37>", line 1, in <module>
- ' '.join(map(lambda x:map(str, x), t1))
- TypeError: sequence item 0: expected str instance, map found
复制代码
然而,为什么以下代码却没有报错?
- >>> ' '.join(map(lambda x:'|'.join(map(str, x)), t1))
- '3|5 4|5 5|9'
- >>>
复制代码
不好意思,四楼我说错了,把你的代码看错了,我是按下面贴的代码思维理解的。
- >>> map(ccc,'(3, 4, 5)|(5, 6, 7)|(9, 0, 9)')
- <map object at 0x024F0310>
- >>> ''.join(map(ccc,'(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'))
- '(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'
- >>> ''.join(map(ccc,['(3, 4, 5)|(5, 6, 7)|(9, 0, 9)']))
- '(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'
- >>> def ddd(x):
- return [str(x)]
- >>> ''.join(map(ddd,'(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'))
- Traceback (most recent call last):
- File "<pyshell#109>", line 1, in <module>
- ''.join(map(ddd,'(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'))
- TypeError: sequence item 0: expected str instance, list found
- >>> ''.join(map(ddd,['(3, 4, 5)|(5, 6, 7)|(9, 0, 9)']))
- Traceback (most recent call last):
- File "<pyshell#110>", line 1, in <module>
- ''.join(map(ddd,['(3, 4, 5)|(5, 6, 7)|(9, 0, 9)']))
- TypeError: sequence item 0: expected str instance, list found
- >>> def ccc(x):
- return str(x)
- >>> ''.join(map(ccc,'(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'))
- '(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'
- >>> ''.join(map(ccc,['(3, 4, 5)|(5, 6, 7)|(9, 0, 9)']))
- '(3, 4, 5)|(5, 6, 7)|(9, 0, 9)'
- >>>
复制代码
你参考下,ddd(x)函数和ccc(x)函数,一个返回列表,会出错,一个返回字符串,没有出错。事实上map函数我没有用到像你这么复杂的,我也hold不住这样的。我理解的map函数,就是一个函数参数,一个可迭代的参数(列表,字符串等),最后函数的结果返回成一个列表。
针对你说的为什么会变成:3|4|5 5|6|7 9|0|9 的结果,我说下我的理解,你参考下,不一定正确,所以我开始没写我的理解。
由于t2 = [(3,4,5),(5,6,7),(9,0,9)],可迭代,那么首先运行的是mmm((3,4,5)即变成‘3|4|5',然后mmm((5,6,7)),即变成'5|6|7',最后就是mmm((9,0,9)),即变成'9|0|9',则map(mmm,t2)返回的是
['3|4|5','5|6|7','9|0|9'] 然后就是" ".join(['3|4|5','5|6|7','9|0|9']) 也就是3|4|5 5|6|7 9|0|9 (mmm(x)函数是3楼的mmm函数)
你的' '.join(map(lambda x:map(str, x), t1)),错误提示是期待一个str实例,但结果是map found .
也就是lambda 函数返回的是一个map对象,你并没有对map进行处理,我把你的出错理解成了
' '.join(map(lambda x:list(map(str, x)), t1))这样出的错,显示值一般得list(map(func,t1)) 或者其他的例如
''.join(map(func,t1)) 或者tuple(map(lambda x:x,range(3)))等等。
|