我环顾四周,似乎找不到正确的方法来排序一个32项元组,把每一个奇数和偶数项都颠倒过来。在
例如:
1 0 3 2 5 4 7 6 9 8
to
0 1 2 3 4 5 6 7 8 9
我当前的代码是这样的
^{pr2}$ipDeviceName的类型是tuple,根据代码的变化,我要么得到一个索引器错误,要么一个元组不支持赋值
我也尝试了同样的结果
nd = self.r.ipDeviceName
for i in nd:
if i&0x01:
nd[i]=self.r.ipDeviceName[i-1]
else:
nd[i]=self.r.ipDeviceName[i+1]
dn = "".join(map(chr,nd))
devicenameText.SetValue(dn)
同样的结果。一些很简单的事情似乎让我捉摸不透。谢谢你的帮助和时间。在
你不能改变元组,它们是不可变的。然而,你可以用一个新的,你想要的方式来代替它们(我不会把你想要的叫做“排序”)。为此,需要交换原始元组中的每对项。在
这是一个直接的实现。请注意,如果最后一个条目的数目是奇数,那么它将不显示最后一个条目,因为您从未说过希望如何处理该案件。处理这种可能性会使代码稍微复杂一些。在
同样的事情也可以用一种可读性较差的方式来完成,比如一个长的单表达式。同样,如果长度为奇数,最后一个条目保持不变。在
^{pr2}$元组是不可变的-一旦它们被创建,就不能修改它们。要修改单个元素,您需要将数据存储在可变集合(如列表)中。您可以使用内置函数
list
和tuple
从元组转换为列表,反之亦然。在或者,您可以使用^{} 和函数式方法从现有的元组创建新的元组,而不必修改原始元组:
或使用^{} :
^{pr2}$注意,这里使用
zip
假设元组有偶数个元素(根据您的问题,这里就是这种情况)。在如果将函数
grouper
和flatten
(请参见itertools recipes)添加到工具集中,则可以执行以下操作:你甚至可以写
flatten(imap(reversed, grouper(2, xs))
,但我想只有死硬的功能型人才会喜欢它。在相关问题 更多 >
编程相关推荐