关于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中元组的问题的主要内容,如果未能解决你的问题,请参考以下文章

python中元组和列表有啥区别

python中元组与列表的区别

元组的元组是python中内置的一种数据结构

提取管道中元组的第二个元素

获取包含元组的列表的索引,其中元组的第一个元素与模式匹配

Spring Boot中的本机查询,列表中元组的WHERE条件