可能重复:
Python中的转置/解压缩功能
我有一个如下所示的列表:
list = (('1','a'),('2','b'),('3','c'),('4','d'))
Run Code Online (Sandbox Code Playgroud)
我想将列表分成2个列表.
list1 = ('1','2','3','4')
list2 = ('a','b','c','d')
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
list1 = []
list2 = []
for i in list:
list1.append(i[0])
list2.append(i[1])
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更优雅的解决方案.
可能重复:
Python中的转置/解压缩功能
我使用numpy库中的zip()函数来排序元组,现在我有一个包含所有元组的列表.我已经修改了该列表,现在我想恢复元组,以便我可以使用我的数据.我怎样才能做到这一点?
我一直在阅读Core Python编程书,作者展示了一个例子:
(4, 5) < (3, 5) # Equals false
Run Code Online (Sandbox Code Playgroud)
所以,我想知道,它是如何/为什么它等于假?python如何比较这两个元组?
顺便说一下,书中没有解释.
给定一个字符串,该字符串是由commma分隔的多个值的序列:
mStr = 'A,B,C,D,E'
Run Code Online (Sandbox Code Playgroud)
如何将字符串转换为列表?
mList = ['A', 'B', 'C', 'D', 'E']
Run Code Online (Sandbox Code Playgroud) 我真的很想知道差异在哪里,更一般地说,找出不能使用HLists的规范用例(或者说,不会比常规列表产生任何好处).
(我知道TupleNScala 中有22个(我相信),而一个只需要一个HList,但这不是我感兴趣的那种概念差异.)
我在下面的文字中标出了几个问题.它实际上可能没有必要回答它们,它们更倾向于指出我不清楚的事情,并指导某些方向的讨论.
我最近在SO上看到了几个人们建议使用HLists的答案(例如,由Shapeless提供),包括对这个问题的删除答案.它引发了这一讨论,从而引发了这个问题.
在我看来,只有当您静态地知道元素的数量及其精确类型时,才会使用hlists.这个数字实际上并不重要,但你似乎不太可能需要生成一个包含不同但静态精确已知类型的元素的列表,但是你不能静态地知道它们的数量.问题1:你甚至可以写一个这样的例子,例如,在循环中吗?我的直觉是,拥有静态精确的hlist与静态未知数量的任意元素(相对于给定的类层次结构的任意)只是不兼容.
如果这是真的,即你静态地知道数字和类型 - 问题2:为什么不使用n元组?当然,你可以类型安全地映射和折叠一个HList(你也可以,但不是类型安全地,借助于一个元组productIterator),但由于元素的数量和类型是静态已知的,你可能只是访问元组元素直接执行操作.
另一方面,如果f您在hlist上映射的函数是如此通用以至于它接受所有元素 - 问题3:为什么不通过它使用它productIterator.map?好的,一个有趣的区别可能来自方法重载:如果我们有几个重载f的,拥有hlist提供的更强的类型信息(与productIterator相反)可以允许编译器选择更具体的f.但是,我不确定这在Scala中是否真的有用,因为方法和功能不一样.
基于相同的假设,即您需要静态地知道元素的数量和类型 - 问题4:可以在元素依赖于任何类型的用户交互的情况下使用hlists吗?例如,想象用循环内的元素填充hlist; 从某个地方(UI,配置文件,演员交互,网络)读取元素,直到某个条件成立.什么类型的hlist是什么?类似于接口规范getElements:HList [...]应该使用静态未知长度的列表,并允许系统中的组件A从组件B获得这样的任意元素列表.
我有一些object.ID-s,我尝试将其作为元组存储在用户会话中.当我添加第一个它工作,但元组看起来像(u'2',),但当我尝试使用获取mytuple = mytuple + new.id错误添加新的can only concatenate tuple (not "unicode") to tuple.
我已经阅读了几个python教程(Dive Into Python,一个),以及Python.org上的语言参考 - 我不明白为什么语言需要元组.
与列表或集合相比,元组没有方法,如果我必须将元组转换为集合或列表以便能够对它们进行排序,那么首先使用元组有什么意义呢?
不变性?
为什么有人关心变量是否存在于内存中的不同位置而不是最初分配的位置?这整个Python的不变性业务似乎过分强调.
在C/C++中,如果我分配一个指针并指向一些有效的内存,我不关心地址的位置,只要在我使用它之前它不是null.
每当我引用该变量时,我都不需要知道指针是否仍然指向原始地址.我只是检查null并使用它(或不使用).
在Python中,当我分配一个字符串(或元组)将其分配给x时,然后修改字符串,为什么我关心它是否是原始对象?只要变量指向我的数据,那就重要了.
>>> x='hello'
>>> id(x)
1234567
>>> x='good bye'
>>> id(x)
5432167
Run Code Online (Sandbox Code Playgroud)
x 仍然引用我想要的数据,为什么有人需要关心它的id是相同还是不同?
有没有办法从python中使用表达式从元组中获取一个值?
def Tup():
return (3,"hello")
i = 5 + Tup(); ## I want to add just the three
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做:
(j,_) = Tup()
i = 5 + j
Run Code Online (Sandbox Code Playgroud)
但这会给我的功能增加几十行,增加一倍.
对于元组,t = ((1, 'a'),(2, 'b'))
dict(t)返回{1: 'a', 2: 'b'}
有没有一个好的方法来获得{'a': 1, 'b': 2}(键和vals交换)?
最终,我希望能够返回1给定'a'或2给定'b',也许转换为dict不是最好的方式.
考虑具有可变参数模板参数的模板化函数的情况:
template<typename Tret, typename... T> Tret func(const T&... t);
Run Code Online (Sandbox Code Playgroud)
现在,我有一个t价值元组.如何func()使用元组值作为参数调用?我已经阅读了bind()函数对象,call()函数,以及apply()不同的一些现在过时的文档中的函数.GNU GCC 4.4实现似乎call()在bind()类中有一个函数,但是关于这个主题的文档很少.
有些人建议使用手写的递归黑客,但可变参数模板参数的真正价值在于能够在上述情况下使用它们.
有没有人有解决方案,或提示在哪里阅读它?
tuples ×10
python ×8
list ×3
arguments ×1
c++ ×1
c++11 ×1
comparison ×1
dictionary ×1
hlist ×1
numpy ×1
parsing ×1
python-2.7 ×1
scala ×1
shapeless ×1
types ×1