【问题标题】:Join items of a list with '+' sign in a string在字符串中使用“+”符号连接列表项
【发布时间】:2016-07-26 16:33:51
【问题描述】:

我希望我的输出是:

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))

【问题讨论】:

  • 当您编写 str(n_nx1lst) 时,您将获得列表的字符串表示形式,因此列表 [1, 2, 3, 4] 字面意思就是字符串 "[1, 2, 3, 4]"
  • ...实际上是"[1, 2, 3, 4]",然后连接会将字符串作为字符列表,在每个字符之间插入+。因此[+1+ +,+ +2+,+ +3+,+ +4+]
  • 我想补充一下,现在已经发布了正确的答案,即您的变量名称很糟糕。非常令人困惑且难以阅读。
  • 顺便说一句,您不需要编写函数来构建您的列表。只需执行n_nx1lst = list(range(n_put+1))。但是如果你真的想用一个函数来做这个,它应该把数字作为一个参数,它应该在函数中构造一个新的列表并返回它。
  • Greg + @spectras:谢谢。你是对的。我正在将该列表中的所有内容都变成一个字符串。 Jim 向我解释说,我应该遍历每个项目。

标签: python list python-3.x


【解决方案1】:

list 中的每个int 元素更改为.join 调用中的str,而不是使用generator expression

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

在第一种情况下,您在整个list 上调用str,而不是在list 中的单个元素上。结果,它加入列表表示中的每个字符,如下所示:

'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]'

使用+ 符号产生您所看到的结果。

【讨论】:

  • 谢谢。这样就完成了工作,并且还得到了将整个 int 列表更改为 str 和将每个 str 更改为 int 之间的区别。你统治 [ :
【解决方案2】:

您无需致电列表中的str。这将返回您的列表的 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 这个因为它提供了一个不错的替代品。
  • 只是猜测,但可能反对者不喜欢你向一个甚至不知道如何正确编写简单函数的新手推荐map
  • @PM2Ring 你说得有道理。但是地图可能和理解一样容易掌握。不过这是主观的。
  • 谢谢。我会检查地图功能。
【解决方案3】:

您需要做的是将一个 string 元素与 ' + ' 连接到列表中的 each 元素。你需要的只是有一些字符串格式。

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

它是如何工作的?
我们使用所谓的list comprehension (5.1.3)此特定用法中的生成器)来迭代我们的int 元素列表,创建liststring 元素。 现在我们可以使用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'

【讨论】:

  • 你的代码很棒。我真的希望我能接受两个答案。你绝对教了一个新的东西来测试。
【解决方案4】:

使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多