Questions tagged «tuples»

在编程中,元组是简单的*产品类型*,表示类型的有序集合。

10
漂亮打印std :: tuple
这是我先前关于漂亮打印的STL容器的问题的跟进,我们设法为其开发了一个非常优雅且完全通用的解决方案。 在接下来的步骤中,我想std::tuple<Args...>使用可变参数模板(严格来说是C ++ 11)进行的漂亮打印。对于std::pair<S,T>,我只是说 std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p) { return o << "(" << p.first << ", " << p.second << ")"; } 打印元组的类似结构是什么? 我尝试了各种形式的模板参数堆栈拆包,传递索引并使用SFINAE来发现何时到达最后一个元素,但是没有成功。我不会因我的代码破译而使你负担重;希望问题描述很简单。本质上,我想要以下行为: auto a = std::make_tuple(5, "Hello", -0.1); std::cout << a << std::endl; // prints: (5, "Hello", -0.1) 包括与上一个问题相同级别的通用性(char / wchar_t,对定界符)的加分点!


13
用Python减去2个列表
现在我有vector3值表示为列表。有没有一种方法可以减去其中两个类似的vector3值,例如 [2,2,2] - [1,1,1] = [1,1,1] 我应该使用元组吗? 如果没有一个在这些类型上定义这些操作数,我可以改为定义它吗? 如果没有,我应该创建一个新的vector3类吗?
84 python  list  tuples  vector 

9
将“元组列表”转换为平面列表或矩阵
使用Sqlite时,“ select..from”命令返回结果“输出”,该结果打印(在python中): >>print output [(12.2817, 12.2817), (0, 0), (8.52, 8.52)] 它似乎是一个元组列表。我想将“输出”转换为简单的1D数组(我猜是Python中的列表): [12.2817, 12.2817, 0, 0, 8.52, 8.52] 或2x3矩阵: 12.2817 12.2817 0 0 8.52 8.52 通过“ output [i] [j]”读取 flatten命令不执行第一个选项的工作,而我不知道第二个选项... :) 你能给我一个提示吗?快速的事情会很棒,因为实际数据会更大(这只是一个简单的示例)。
82 python  list  tuples 

8
如何为元组增加价值?
我正在编写一个脚本,其中有一个类似的元组列表('1','2','3','4')。例如: list = [('1','2','3','4'), ('2','3','4','5'), ('3','4','5','6'), ('4','5','6','7')] 现在我需要添加'1234','2345','3456'并'4567'分别为每个元组的结尾。例如: list = [('1','2','3','4','1234'), ('2','3','4','5','2345'), ('3','4','5','6','3456'), ('4','5','6','7','4567')] 有可能吗?
79 python  tuples 

6
地图操作中的元组拆箱
我经常发现自己正在使用元组的列表,序列和迭代器,并且希望执行以下操作, val arrayOfTuples = List((1, "Two"), (3, "Four")) arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 } 但是,编译器似乎从未同意这种语法。相反,我最终写了, arrayOfTuples.map { t => val e1 = t._1 val e2 = t._2 e1.toString + e2 } 真是愚蠢。我该如何解决?

7
当b是列表时,为什么b + =(4,)有效而b = b +(4,)不起作用?
如果我们采取b = [1,2,3]并尝试这样做:b+=(4,) 它返回b = [1,2,3,4],但是如果我们尝试这样做b = b + (4,)是行不通的。 b = [1,2,3] b+=(4,) # Prints out b = [1,2,3,4] b = b + (4,) # Gives an error saying you can't add tuples and lists 我预计b+=(4,)会失败,因为您无法添加列表和元组,但它确实有效。因此,我尝试b = b + (4,)期望得到相同的结果,但是没有用。

11
在什么情况下我会使用元组作为字典键?
我正在研究列表和元组之间的区别(在Python中)。一个明显的事实是,元组是不可变的(在初始赋值后不能更改值),而列表是可变的。 文章中的一句话让我明白了: 只能将不可变元素用作字典键,因此只能将元组而不是列表用作键。 我很难考虑要使用元组作为字典键的情况。您能否提供一个示例问题,说明这是自然,高效,优雅或显而易见的解决方案? 编辑: 感谢您的示例。到目前为止,我认为一个非常重要的应用程序是函数值的缓存。

9
何时使用:Tuple与Class C#7.0
在Tuples之前,我曾经创建过一个class及其变量,然后从此类创建对象,并使该对象成为某些函数的返回类型。 现在用的元组,我可以做同样的在C#7.0,我们可以为元组的属性分配可以理解的名称(在此之前它item1,item2等..) 所以现在我想知道,什么时候应该使用它,什么时候应该在c#7.0中创建一个类?
76 c#  tuples  c#-7.0  valuetuple 

1
Python元组在return语句中解包
Python语言(尤其是3.x)允许非常广泛地拆解可迭代对象,其中一个简单的示例是 a, *rest = 1, 2, 3 多年来,这种拆包已逐渐普及(例如参见PEP 3132和PEP 448),从而使其可以在越来越多的情况下使用。因此,我很惊讶地发现以下内容在Python 3.6中是无效的语法(在Python 3.7中仍然如此): def f(): rest = [2, 3] return 1, *rest # Invalid 我可以通过将返回的元组封装在括号中来使其工作,如下所示: def f(): rest = [2, 3] return (1, *rest) # Valid 我在return声明中使用它的事实似乎很重要,因为 t = 1, *rest 确实是合法的,并且在带括号和不带括号的情况下都相同。 Python开发人员只是忘记了这种情况,还是有任何原因使这种情况成为无效语法? 我为什么在乎 这打破了我以为我与Python语言达成的一项重要合同。考虑以下(也是有效的)解决方案: def f(): rest = [2, 3] …

4
C#7元组和Lambda
使用新的C#7元组语法,是否可以指定一个以元组为参数的lambda并在lambda中使用解压缩的值? 例: var list = new List<(int,int)>(); 在lambda中使用元组的正常方法: list.Select(value => value.Item1*2 + value.Item2/2); 我希望避免使用新糖.Item1 .Item2,例如: list.Select((x,y) => x*2 + y/2); 最后一行不起作用,因为它被视为lambda的两个参数。我不确定是否真的有办法。 编辑: 我在lambda定义((x,y)) => ...中尝试了双括号,但没有用:,也许尝试起来很愚蠢,但是双括号实际上在这里起作用: list.Add((1,2)); 另外,我的问题不是要避免使用丑陋的默认名称.Item .Item2,而是要在lambda中实际拆开元组(以及为什么不能实现或不可能)。如果您是来这里使用默认名称的解决方案,请阅读Sergey Berezovskiy的答案。 编辑2: 只是想到了一个更通用的用例:是否有可能(或为什么不这样做)“解构”传递给方法的元组?像这样: void Foo((int,int)(x,y)) { x+y; } 代替这个: void Foo((int x,int y) value) { value.x+value.y }
75 c#  lambda  tuples  c#-7.0 


7
为什么Scala的元组语法如此不寻常?
在数学和计算机科学中,元组是元素的有序列表。在集合论中,(有序的)n元组是n个元素的序列(或有序列表),其中n是正整数。 因此,例如,在Python中,可以通过访问元组的第二项t[1]。 在Scala中,只能通过奇怪的名称进行访问t._2。 所以问题是,为什么不能按定义访问序列或列表中的元组数据?是否有某种主意或尚未检查?

7
为什么splatting在rhs上创建一个元组,而在lhs上创建一个列表?
考虑例如 squares = *map((2).__rpow__, range(5)), squares # (0, 1, 4, 9, 16) *squares, = map((2).__rpow__, range(5)) squares # [0, 1, 4, 9, 16] 因此,在所有其他条件相同的情况下,当我们在lhs上进行排序时,会得到一个列表,而当我们在rhss上进行布局时,会得到一个元组。 为什么? 这是设计使然吗,如果是,原因是什么?否则,是否有任何技术原因?还是只是这样,没有特殊原因?

3
std :: tuple sizeof,是否错过了优化?
我已经检查了所有主要的编译器,并且sizeof(std::tuple<int, char, int, char>)所有这些都是16。大概它们只是将元素按顺序放入元组中,因此由于对齐而浪费了一些空间。 如果元组在内部像这样存储元素:int, int, char, char,则其sizeof可以为12。 实现有可能执行此操作,还是该标准中的某些规则禁止这样做?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.