簡體   English   中英

為什么我不能連接這個列表中的項目,但我可以將它們相乘?

[英]Why can't I concatenate items in this list but I can multiply them?

我有一個列表包含撇號內的項目,我可以使用以下'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'對象”。 如果列表項是字符串,我不應該將它們相乘。 既然我可以,他們必須是數字,所以在這種情況下為什么我不能添加任何東西?

編輯:有人可以告訴我為什么這個問題不好? 我已經閱讀了發布規則,但即將被踢,因為我得到了很多負面反饋,但我只是一個初學者,我正盡力盡力寫作。

在第一個例子中, 你沒有數字乘法 :如果你乘以一個字符串 ,你重復字符串 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')

在命令行上嘗試:

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


如果要進行字符串連接,則需要執行以下操作之一:

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

'2' * 5會將'22222'作為字符串返回,而不會像您想象的那樣返回10。

你應該把你的變量轉換為int(i) + 5 ,這會將i視為整數而不是字符串。

'1' * 5將給你'11111' ,而不是5 您可以將字符串和整數相乘。 但是,您無法添加字符串和整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM