在 python 中每 3 位数字问题添加逗号,使用列表或使用格式有何不同

Adding comma every 3 digit problem, in python, what's different using list or using format

我正在网站上练习算法。

我想每 3 位添加数据(数字)逗号(,)。

但是'a',我做的那个变量,不能作为收集答案。

但是'b',我搜索的哪个变量是收集的答案。

你能告诉我为什么 'a' 和 'b'

不一样吗
length = 8
data = "12421421"

inv_result = []
for index in range(length):
    if index % 3 == 0:
        inv_result.append(',')
        inv_result.append(str(data[index]))
    else:
        inv_result.append(str(data[index]))

result = inv_result[::-1]

#first comma delete
result.pop()

a = ''.join(result)
b = format(int(datas),",")

print(a)
print(b)
print(a == b)

结果是

12,412,421
12,421,421
False

因为你用这条线让它倒退:

result = inv_result[::-1]

如果您没有颠倒顺序,那么您的顺序应该是正确的。

result = inv_result
result.pop(0) # remove first character which is a comma

但这只适用于位数是三的倍数的情况。例如,如果您的数字是 1234,那么这样做会导致 123,4 而不是所需的 1,234。

所以你必须在开始时反转字符串或以相反的顺序遍历它。然后保留后面的反转和 pop() 就像你一样。

for index in range(length):
    if index % 3 == 0:
        inv_result.append(',')
    inv_result.append(str(inv_data[-1-index]))# count from -1 to more negative, equivalent to going backwards through string

result = inv_result[::-1]

#first comma delete
result.pop()

你的问题是你一开始没有对数据进行逆向。以下(稍微清理过的)代码有效:

length = 8
data = "12421421"
inv_data = data[::-1]
inv_result = []
for index in range(length):
    if index % 3 == 0:
        inv_result.append(',')
    inv_result.append(str(inv_data[index]))

result = inv_result[::-1]

#first comma delete
result.pop()

a = ''.join(result)
b = format(int(data),",")

print(a)
print(b)
print(a == b)

有理解的解决方案:

data         = "12421421"
len_data     = len(data)
triplets_num = len_data // 3
remainder    = len_data % 3
triplets     = [data[:remainder]] if remainder else []
triplets    += [data[remainder+i*3:remainder+3+i*3] for i in range(triplets_num)]
result       = ','.join(triplets)
print(result)