我有一个列表包含撇号中的项目,我可以使用以下'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'对象”。如果列表项是字符串,我不应该将它们相乘。既然我可以,他们必须是数字,所以在这种情况下为什么我不能添加任何东西?
编辑:有人可以告诉我为什么这个问题不好?我已经阅读了发布规则,但即将被踢,因为我收到了很多负面反馈,但我只是一个初学者,我正尽力尽力写作。答案 0 :(得分:10)
在第一个示例中,您不会在数字上乘以:如果乘以字符串,则重复字符串 n
次,像:
>>> "foo"*5
'foofoofoofoofoo'
所以你的第一个代码片段会产生:
>>> [i * 5 for i in list1] # see, you repeat the string
['11111', '22222', '33333']
在str
和int
之间添加无支持,因此会出错。可能是因为唯一合理的操作是将数字添加到字符串的末尾,但这也不是数字添加。
如果您想进行数值计算,则必须先使用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
。
您可以将字符串和整数相乘。但是,您无法添加字符串和整数。