将列表中的项用“+”符号连接成一个字符串

5
我希望输出如下:

我希望我的结果是:

Enter a number : n
List from zero to your number is : [0,1,2,3, ... , n]
0 + 1 + 2 + 3 + 4 + 5 ... + n = sum(list)

但是我的实际输出是:

Enter a number : 5
List from zero to your number is :  [0, 1, 2, 3, 4, 5]
[+0+,+ +1+,+ +2+,+ +3+,+ +4+,+ +5+] =  15

我正在使用join方法,因为这是我唯一熟悉的方法。

为什么加号会打印在每个项目周围?为什么包括空格?

如何将list的值打印成一个用户可读的字符串?

谢谢。这是我的代码:

##Begin n_nx1 application
n_put = int(input("Choose a number : "))

n_nx1lst = list()
def n_nx1fct():
    for i in range(0,n_put+1):
        n_nx1lst.append(i)
    return n_nx1lst

print ("List is : ", n_nx1fct())
print ('+'.join(str(n_nx1lst)) + " = ", sum(n_nx1lst))

2
当你写str(n_nx1lst)时,你得到的是列表的字符串表示形式,因此列表[1, 2, 3, 4]实际上变成了字符串"[1, 2, 3, 4]" - Greg
2
实际上是 "[1, 2, 3, 4]",然后 join 函数会将字符串作为字符列表处理,在每个字符之间插入一个 +。因此结果为 [+1+ +,+ +2+,+ +3+,+ +4+] - spectras
3
现在我想补充一点,正确的答案已经发布了,但你的变量名称太糟糕了。非常混乱和难以阅读。 - xandermonkey
2
顺便提一下,你不需要编写一个函数来构建你的列表。只需执行 n_nx1lst = list(range(n_put+1)) 即可。但是如果你_真的_想用一个函数来完成这个任务,它应该以数字作为参数,并在函数内部构造一个新的列表并返回它。 - PM 2Ring
@AlexRosenfeld。听到这个消息感到很遗憾:它实际上是 n_nx1 列表(n_nx1lst)和 n_nx1 函数(n_nx1fct)。既然它们已经出现在已接受的答案中,我无法更改它们。 - user6568562
显示剩余2条评论
4个回答

6

使用生成器表达式,在.join调用内部将list中的每个int元素更改为str

print("+".join(str(i) for i in n_nx1lst) + " = ", sum(n_nx1lst))    

在第一种情况下,你在整个列表上调用了“str”,而不是在列表中的单个元素上调用。因此,它会将列表的表示中的每个字符连接起来,看起来像这样:
'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]'

使用加号+会得到你所看到的结果。

1
谢谢。这样做了工作,并且我也知道了将整个int列表更改为str和将每个str更改为int之间的区别。你很厉害[: - user6568562

3

您不需要在列表上调用str。那会返回您的列表的字符串表示形式,然后将其与'+'连接。

相反,您可以使用map将列表中的每个项目转换为str,然后使用join

print('+'.join(map(str, n_nx1lst)) + " = ", sum(n_nx1lst))

您还可以使用新的样式格式化,使输出更易读:
result = '+'.join(map(str, n_nx1lst))
print("{} = {}".format(result, sum(n_nx1lst)))

1
他本应该拥有这个功能,我会+1支持这个,因为它提供了一个不错的替代方案。 - Dimitris Fasarakis Hilliard
1
只是猜测,也许那个点踩者不喜欢你向一个连简单函数都不会写的新手建议使用“map”函数。 - PM 2Ring
@PM2Ring 你说得有道理。但是获取map可能和获取一个推导式一样容易。不过这是主观的。 - Moses Koledoye
谢谢。我会检查映射函数。 - user6568562

3
你需要做的是将列表中的每个元素与'+'连接成一个字符串元素。从那里开始,你只需要进行一些字符串格式化即可。
def sum_of_input():
    n = int(raw_input("Enter a number : "))  # Get our raw_input -> int
    l = range(n + 1)  # Create our list of range [ x≥0 | x≤10 ]
    print("List from zero to your number: {}".format(l))
    print(' + '.join(str(i) for i in l) + ' = {}'.format(sum(l)))

示例输出:

>>> sum_of_input()
Enter a number : 10
List from zero to your number: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

它是如何工作的?
我们使用所谓的列表推导式(5.1.3)(在这个特定的用法中,是生成器),来对我们的int元素列表进行迭代,创建一个string元素列表。现在,我们可以使用string方法中的join()来创建我们所需的格式。

>>> [str(i) for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
>>> ' + '.join(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
'1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10'

1
你的代码很棒。我真希望我能接受两个答案。你肯定教了我一个新的测试方法。 - user6568562

0

使用 f-string :

n_put = range(int(input("Choose a number : ")))

res = sum(n_put)

print ("List is : ", [*n_put])

print(*n_put, sep="+", end = f" = {res}")

提供

Choose a number : 5
List is :  [0, 1, 2, 3, 4]
0+1+2+3+4 = 10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接