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

时间:2017-05-22 12:30:07

标签: python string list

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

list1 = ['1','2','3']
list2 = [i * 5 for i in list1]
print list2

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

list1 = ['1','2','3']
list2 = [i + 5 for i in list1]
print list2

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

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

4 个答案:

答案 0 :(得分:10)

在第一个示例中,您不会在数字上乘以:如果乘以字符串,则重复字符串 n次,像:

>>> "foo"*5
'foofoofoofoofoo'

所以你的第一个代码片段会产生:

>>> [i * 5 for i in list1] # see, you repeat the string
['11111', '22222', '33333']

strint之间添加无支持,因此会出错。可能是因为唯一合理的操作是将数字添加到字符串的末尾,但这也不是数字添加。

如果您想进行数值计算,则必须先使用int将其转换为int(..)

>>> [int(i) * 5 for i in list1]
[5, 10, 15]
>>> [int(i) + 5 for i in list1]
[6, 7, 8]

如您所见,此处的结果是int s列表(数字周围没有引号)。

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

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

答案 1 :(得分:6)

在命令行上尝试:

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

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

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

>>> int('1') * 5
5
>>> int('1') + 5
6

这两者都会导致int s,而非str s。

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

>>> '1' + '5'
'15'
>>> '1' + str(5)
'15'

答案 2 :(得分:3)

'2' * 5会将'22222'作为字符串返回,而不是像你想象的那样返回10。

您应该转换变量int(i) + 5,这会将i视为整数而不是字符串。

答案 3 :(得分:2)

'1' * 5会为您'11111'而不是5。 您可以将字符串和整数相乘。但是,您无法添加字符串和整数。