我在python中有一个名为tuple的类
class Town(collections.namedtuple('Town', [
'name',
'population',
'coordinates',
'population',
'capital',
'state_bird'])):
# ...
Run Code Online (Sandbox Code Playgroud)
我想做的是将其变成字典.我承认python不是我强大的语言之一.关键是我不希望它与我所拥有的字段的名称或数字紧密相关.
有没有办法写它,以便我可以添加更多的字段,或传递一个完全不同的命名元组并获取字典.
编辑:我不能改变原来的类定义,因为它在别人的代码中.所以我需要一个城镇的实例并将其转换为字典.
我有一个列表'a'
a= [(1,2),(1,4),(3,5),(5,7)]
Run Code Online (Sandbox Code Playgroud)
我需要找到特定数字的所有元组.说它会是1
result = [(1,2),(1,4)]
Run Code Online (Sandbox Code Playgroud)
我怎么做?
有人可以解释一下元组是什么以及如何在真实世界场景中使用它.我想知道这如何丰富我的编码经验?
为什么似乎没有人在C++中使用元组,无论是Boost元组库还是TR1的标准库?我已经阅读了很多C++代码,我很少看到元组的使用,但我经常看到很多地方元组会解决许多问题(通常从函数返回多个值).
元组允许你做这样的各种酷事:
tie(a,b) = make_tuple(b,a); //swap a and b
Run Code Online (Sandbox Code Playgroud)
这肯定比这更好:
temp=a;
a=b;
b=temp;
Run Code Online (Sandbox Code Playgroud)
当然你总能做到这一点:
swap(a,b);
Run Code Online (Sandbox Code Playgroud)
但是如果要旋转三个值怎么办?你可以用元组做到这一点:
tie(a,b,c) = make_tuple(b,c,a);
Run Code Online (Sandbox Code Playgroud)
元组还使得从函数返回多个变量变得更加容易,这可能是比交换值更常见的情况.使用对返回值的引用肯定不是很优雅.
我没有想到的元组有什么大的缺点吗?如果没有,为什么他们很少使用?他们慢了吗?或者只是人们不习惯他们?使用元组是个好主意吗?
我反编译了一些C#7库并看到了使用的ValueTuple泛型.是什么ValueTuples以及为什么不Tuple呢?
我正在测试元组结构,当我使用==运算符时,我发现它很奇怪:
>>> (1,) == 1,
Out: (False,)
Run Code Online (Sandbox Code Playgroud)
当我将这两个表达式分配给变量时,结果为true:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
Run Code Online (Sandbox Code Playgroud)
这个问题与我视图中的Python元组尾随逗号语法规则不同.我问==运营商之间的表达群体.
在Python中(我只使用Python 3.6进行了检查,但我相信它应该适用于许多以前的版本):
(0, 0) == 0, 0 # results in a two element tuple: (False, 0)
0, 0 == (0, 0) # results in a two element tuple: (0, False)
(0, 0) == (0, 0) # results in a boolean True
Run Code Online (Sandbox Code Playgroud)
但:
a = 0, 0
b = (0, 0)
a == b # results in a boolean True
Run Code Online (Sandbox Code Playgroud)
为什么两种方法的结果不同?相等运算符是否以不同方式处理元组?
在单个元素元组的情况下,需要尾随逗号.
a = ('foo',)
Run Code Online (Sandbox Code Playgroud)
那个有多个元素的元组怎么样?似乎尾随逗号是否存在,它们都是有效的.它是否正确?在我看来,使用尾随逗号更容易编辑.这是一种糟糕的编码风格吗?
a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)
Run Code Online (Sandbox Code Playgroud) 我已经习惯了,std::tie没有多考虑它.它有效,所以我接受了:
auto test()
{
int a, b;
std::tie(a, b) = std::make_tuple(2, 3);
// a is now 2, b is now 3
return a + b; // 5
}
Run Code Online (Sandbox Code Playgroud)
但这个黑魔法是如何运作的呢?如何做一个临时的创建std::tie改变a和b?我发现这更有趣,因为它是一个库功能,而不是语言功能,所以我们可以自己实现并理解它.
我想在C#中创建一个Dictionary查找表.我需要将一个3元组的值解析为一个字符串.我尝试使用数组作为键,但这不起作用,我不知道还能做什么.在这一点上,我正在考虑制作一本词典字典词典,但这看起来可能不是很漂亮,尽管我会在javascript中这样做.