【发布时间】:2020-01-30 07:13:23
【问题描述】:
我寻找一个简单的 Python 函数,它接受任意数量的可迭代对象(元组、列表、字典),并以相同的顺序返回它们:
a = (1, 2, {3: 4}, 5)
b = [(5,6), [7,8], [9,0], [1,2]]
c = {'arrow': 5, 'knee': 'guard', 0: ('x',2)}
x, y, z = magic(a, b, c)
print(x, y, z, sep='\n')
# ({3: 4}, 1, 2)
# [[9, 0], (5, 6), [7, 8]]
# {0: ('x', 2), 'arrow': 5, 'knee': 'guard'}
函数必须:
- 返回按相同顺序打乱的迭代(见上文)
- 接受任意数量的迭代
- 保留迭代类型
- 支持任何深度和类型的嵌套迭代
-
不洗牌嵌套元素本身(例如,上面的
[7,8]不会变成[8,7]) - 返回长度为最短迭代长度且不引发错误的迭代(见上文)
如果在随机播放步骤中使用 Numpy、random 等(例如 np.random.shuffle(magic_packing)),则可以,但 不能 是高级库方法(使用多处理、编码等 - 应该是 'plain ')
我见过related SO's,但无法使它们适应这种笼统的情况。如何实现?
【问题讨论】:
-
所以你的意思是
tuple、list和dict对象只有?请注意,dict对象仅在 Python +3.7 中排序...您还可以假设对象具有相同的长度吗? -
很抱歉,但这与
numpy有什么关系? -
@OverLordGoldDragon 当然可以。在
random模块中。 -
VTCing 作为一个问题的多个关注点。这与 SO 无关,因为对更多读者没有用处。选择一个 - 在您的一长串功能列表中,您对哪个具体项目有疑问?
-
如果您正在寻找改进现有解决方案的方法,那就是 Code Review 的领域(请阅读他们的指南)。
标签: python random python-3.7 iterable