【问题标题】:How to zero all tuple values apart from the minimum and maximum values如何将除最小值和最大值之外的所有元组值归零
【发布时间】:2020-04-13 13:06:59
【问题描述】:

我正在尝试找到某个元组的最小值和最大值并将所有其他值初始化为零

假设我有一个元组 p = (1,2,3) 那么 p_new 将是:(1,0,3)

我试图以一种简单而优雅的方式做到这一点,但没有成功

到目前为止,这是实现:

p = (1,2,3)

# finding the min/max indexes:
mx = p.index(max(p))
mn = p.index(min(p))

p_new = []
for i in range(len(p)):
    if i == mx:
        p_new.append(p[mx])
    elif i == mn:
        p_new.append(p[mn])
    else:
        p_new.append(0)
print('p_new is:',tuple(p_new))enter code here

代码输出:

p_new is: (1, 0, 3)

Process finished with exit code 0

【问题讨论】:

  • 对我来说工作得很好!!

标签: python tuples max min


【解决方案1】:
p = (1,2,3)
p = tuple( i if i in [min(p), max(p)] else 0 for i in p )

print('p_new is:',tuple(p_new))

【讨论】:

  • 好答案,但您不需要 [] - tuple 将接受生成器表达式,因此不需要列表。
  • 值得注意的是:最好在新元组循环之前将最小值和最大值保存在变量中,而不是[min(p), max(p)] 每次迭代都会重新-计算循环。对于较大的可迭代对象,例如 p = tuple(range(10_000)),它变得非常慢。在我相当旧的机器上,%timeit tuple( i if i in [min(p), max(p)] else 0 for i in p ) 是 4.37 %timeit tuple( i if i in (mn, mx) else 0 for i in p ) 是 1.59 ms。这太慢了 2748x。 PS。做minmax = min(p), max(p)if i in minmax 是最快的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多