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

2024-04-20 09:43:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用撇号括起来的列表,我可以使用下面的“for循环”

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'对象”。如果列表项是字符串,我就不能将它们相乘。既然我可以,它们一定是数字,那么为什么我不能给它们加上什么呢?你知道吗

编辑:有人能告诉我为什么这个问题不好吗?我已经通读了张贴规则,但即将被踢,因为我得到了很多负面反馈,但我只是一个初学者,并试图写最好的,我可以。你知道吗


Tags: 对象字符串in列表for错误符号数字
3条回答

在第一个示例中,不进行数字相乘:如果将字符串相乘,则将字符串重复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的列表(数字周围没有引号)。你知道吗

大多数序列(列表、元组、字符串等)在与整数相乘时会构造相同类型的重复序列。比如:

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

'2' * 5将返回“22222”作为字符串,而不是您所想的10。你知道吗

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

在命令行中尝试以下操作:

>>> '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,而不是str


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

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

相关问题 更多 >