为什么我不能连接这个列表中的项目,但我可以将它们相乘?

use*_*720 2 python string list

我有一个列表包含撇号内的项目,我可以使用以下'for循环'

list1 = ['1','2','3']
list2 = [i * 5 for i in list1]
print list2
Run Code Online (Sandbox Code Playgroud)

这似乎将列表项视为数字,但是当我将乘号更改为添加符号时:

list1 = ['1','2','3']
list2 = [i + 5 for i in list1]
print list2
Run Code Online (Sandbox Code Playgroud)

我得到错误"无法连接'str'和'int'对象".如果列表项是字符串,我不应该将它们相乘.既然我可以,他们必须是数字,所以在这种情况下为什么我不能添加任何东西?

编辑:有人可以告诉我为什么这个问题不好?我已经阅读了发布规则,但即将被踢,因为我得到了很多负面反馈,但我只是一个初学者,我正尽力尽力写作.

Wil*_*sem 10

在第一个例子中,你没有数字乘法:如果你乘以一个字符串,你重复字符串 n时间,如:

>>> "foo"*5
'foofoofoofoofoo'
Run Code Online (Sandbox Code Playgroud)

所以你的第一个代码片段导致:

>>> [i * 5 for i in list1] # see, you repeat the string
['11111', '22222', '33333']
Run Code Online (Sandbox Code Playgroud)

目前不支持对之间除了str英格斯和intS,以便将错误.可能是因为唯一合理的操作是将数字添加到字符串的末尾,但这也不是数字加法.

如果要进行数值计算,则必须将其转换为int第一个int(..):

>>> [int(i) * 5 for i in list1]
[5, 10, 15]
>>> [int(i) + 5 for i in list1]
[6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,此处的结果是带有ints 的列表(数字周围没有引号).

当您将它们与整数相乘时,大多数序列(列表,元组,字符串等)将构造相同类型的序列并重复.喜欢:

>>> [1,'a',2,"five"]*3
[1, 'a', 2, 'five', 1, 'a', 2, 'five', 1, 'a', 2, 'five']
>>> (1,'a',2,"five")*3
(1, 'a', 2, 'five', 1, 'a', 2, 'five', 1, 'a', 2, 'five')
Run Code Online (Sandbox Code Playgroud)


Att*_*tie 6

在命令行上尝试:

>>> '1' * 5
'11111'
>>> '1' + 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
Run Code Online (Sandbox Code Playgroud)

这是你所期望的吗?可能不是...


如果要进行计算,则需要执行以下操作:

>>> int('1') * 5
5
>>> int('1') + 5
6
Run Code Online (Sandbox Code Playgroud)

这些都导致ints,而不是strs.


如果要进行字符串连接,则需要执行以下操作之一:

>>> '1' + '5'
'15'
>>> '1' + str(5)
'15'
Run Code Online (Sandbox Code Playgroud)