关于Python中元组的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Python中元组的问题相关的知识,希望对你有一定的参考价值。
代码: #!/usr/bin/python zoo = ('wolf', 'elephant', 'penguin') print 'Number of animals in the zoo is', len(zoo) new_zoo = ('monkey', 'dolphin', zoo) print 'Number of animals in the new zoo is', len(new_zoo) 输出 $ python using_tuple.py Number of animals in the zoo is 3 Number of animals in the new zoo is 3 问题: Line2 中 Number of animals in the new zoo is 3 这里有点奇怪, 为什么是3不是5 , 'monkey' + 'dolphin'+ zoo 中的3只动物, 应该是5啊, 为什么是3呢?
参考技术A new_zoo=
('monkey',
'dolphin',
zoo)
=
('monkey',
'dolphin',
('wolf',
'elephant',
'penguin'))
而不是等于
('monkey',
'dolphin',
'monkey',
'dolphin',
zoo)
所以
len(new_zoo)
还是等于3。只不过它的第三个元素也是个
元组
罢了。
提取管道中元组的第二个元素
【中文标题】提取管道中元组的第二个元素【英文标题】:Extract the second element of a tuple in a pipeline 【发布时间】:2018-11-02 22:33:21 【问题描述】:我希望能够提取管道中元组的第 N 项,而不使用 with
或以其他方式破坏管道。 Enum.at
可以完美运行,除了元组不是枚举。
这是一个鼓舞人心的例子:
colors = %red: 1, green: 2, blue: 3
data = [:red, :red, :blue]
data
|> Enum.map(&Map.fetch(colors, &1))
|> Enum.unzip
这会返回[:ok, :ok, :ok], [1, 1, 3]
,假设我只想提取[1, 1, 3]
(对于这种特定情况,我可以使用fetch!
,但我的实际代码不存在。)
我可以补充
|> Tuple.to_list
|> Enum.at(1)
有没有更好的方法不需要从每个元组中创建一个临时列表?
【问题讨论】:
【参考方案1】:使用Kernel.elem/2
:
iex(1)> [:ok, :ok, :ok], [1, 1, 3] |> elem(1)
[1, 1, 3]
【讨论】:
啊,我像往常一样想太多了。谢谢【参考方案2】:模式匹配可以提供帮助
_status, required_value =
data
|> Enum.map(&Map.fetch(colors, &1))
|> Enum.unzip
你可以忽略_status
。
【讨论】:
我应该澄清一下,extract
步骤位于管道的中间。使用模式匹配(也是我的首选方式),最终需要中间变量和多个管道:(以上是关于关于Python中元组的问题的主要内容,如果未能解决你的问题,请参考以下文章