簡體   English   中英

如何對數組中每個值的數字求和以創建新數組?

[英]How to sum the digits of each value in an array to create a new array?

  • 起始數組: [1555, 1116, 221, 997]
  • 結束數組: [16, 9, 5, 25]
  • 其中結束數組中的每個數字是起始數組中相應數字的數字之和。
  • 如何從起始數組到結束數組?

您可以使用列表理解,其中每個數字都轉換為字符串->拆分為字符列表->轉換為數字(數字)返回->求和:

start = [1555, 1116, 221, 997]
end = [sum(map(int, list(str(x)))) for x in start]
print(end) # output: [16, 9, 5, 25]

我相信您要問的是創建一個數組,其元素是原始數組中每個數字的數字之和。 數字總和被無恥地從Sum the numbers of a number - python 中竊取,並將它們放在一起你得到:

def sum_digits(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r

in_array = [1555, 1116, 221, 997]
out_array = [sum_digits(n) for n in in_array]
print(out_array)

希望這可以幫助!

t = [1555, 1116, 221, 997]

result = [sum(int(d) for d in str(v)) for v in t]

print(result)
[16, 9, 5, 25]
  • 對應for-loop
result = list()
for v in t:
    r = list()
    for d in str(v):
        r.append(int(d))
    result.append(sum(r))

%%timeit比較

  • 給定以下測試列表
import numpy as np

np.random.seed(123)
t = [np.random.randint(100, 4000) for _ in range(4000000)]
  • 這個答案
%%timeit
[sum(int(d) for d in str(v)) for v in t]

5.27 s ± 60.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
[sum(map(int, list(str(x)))) for x in t]

4.63 s ± 37 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
def sum_digits(n):
    r = 0
    while n:
        r, n = r + n % 10, n // 10
    return r

%%timeit
[sum_digits(n) for n in t]

1.72 s ± 10.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM