在 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)
我正在网站上练习算法。
我想每 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)