我是一名有用的助手,可以为您翻译文本。
我有一个包含3个元素的Python元组,我想使用一个包含3个元素的列表的索引对其进行排序或重新排列,并且我想知道最简洁的方法是什么。
到目前为止,我已经得到了以下代码:
有没有更简洁的方法来创建
我有一个包含3个元素的Python元组,我想使用一个包含3个元素的列表的索引对其进行排序或重新排列,并且我想知道最简洁的方法是什么。
到目前为止,我已经得到了以下代码:
my_tuple = (10, 20, 30)
new_positions = [2, 0, 1]
my_shuffled_tuple = my_tuple[new_positions[0]], my_tuple[new_positions[1]], my_tuple[new_positions[2]]
# outputs: (30, 10, 20)
如果我这样做,也会得到相同的结果:
my_shuffled_tuple = tuple([my_tuple[i] for i in new_positions])
有没有更简洁的方法来创建
my_shuffled_tuple
?
tuple([my_tuple[i] for i in new_positions])
语法。但感谢 Bas 指出了关于 numpy 的注意点!像my_array[new_positions]
这样的语法是我最初所希望的 - 我会考虑将我的元组转换为 numpy 数组,尽管速度在我的应用程序中并不是一个问题。 - tomr_stargazermax(int(line) for line in big_file)
永远不会在内存中超过一行。 - Bas Swinckelstuple
构造函数内使用生成器表达式可能不会受到这种影响,因为tuple
构造函数在C级别上进行了优化。但更重要的是,引入有关生成器表达式与推导式的任何微妙差别都是过度夸大的,通常只是过早或不必要的优化,有时甚至更糟。我曾经看到过一些代码,其中某人费尽心思制作了一个包含两个元素的生成器,并手动调用了两次next
。那很糟糕——即使它有一些资源好处,对于新手来说可读性的惩罚也太严重了。 - ely