如何獲取看起來喜歡likes_clean的串列
likes = ['82.3k', '20k', '18.2k', '17.4k', '14.2k', '13.8k', '13k', '11.4k', '9.2k',
'8.7k', '8k', '7.1k', '6.8k', '5.7k', '5.2k', '4.9k', '4.8k', '4.6k', '4.6k', '4.6k',
'4.4k', '4.4k', '4.2k', '4k', '4k', '3.6k', '3.6k', '3.3k', '3.2k', '3k]
likes_clean = [82300,20000,18200,17400,14200,13800,13000,11400,9200,8700,8000,7100,6800,5700,5200,4900,4800,4600,4600,4600,4400,
4400,4200,4000,4000,3600,3600,3300,3200,3000]
#This is what i tried
def likes_count(lks):
lks = likes
if lks[-1] == 'k':
return int(float(lks[:-1]) * 1000)
return int(lks)
# i'm getting error when i try to call the function
likes_count(likes)
我收到TypeError : int() 引數必須是字串、類似位元組的物件或實數,而不是“串列”
uj5u.com熱心網友回復:
錯誤資訊很清楚。int()引數無效。使用串列推導來處理每個單獨的條目,并且值是浮點數而不是整數:
# added some non-k values for testing
likes = ['1','2','3','82.3k', '20k', '18.2k', '17.4k', '14.2k', '13.8k', '13k', '11.4k', '9.2k',
'8.7k', '8k', '7.1k', '6.8k', '5.7k', '5.2k', '4.9k', '4.8k', '4.6k', '4.6k', '4.6k',
'4.4k', '4.4k', '4.2k', '4k', '4k', '3.6k', '3.6k', '3.3k', '3.2k', '3k']
likes_clean = [1,2,3,82300,20000,18200,17400,14200,13800,13000,11400,9200,8700,8000,7100,6800,5700,5200,4900,4800,4600,4600,4600,4400,
4400,4200,4000,4000,3600,3600,3300,3200,3000]
# items with k have possible floating point to be converted,
# but without k expected to be whole integers.
likes_processed = [int(float(x[:-1])*1000) if x.endswith('k') else int(x)
for x in likes]
print(likes_processed)
print(likes_processed == likes_clean)
輸出:
[1, 2, 3, 82300, 20000, 18200, 17400, 14200, 13800, 13000, 11400, 9200, 8700, 8000, 7100, 6800, 5700, 5200, 4900, 4800, 4600, 4600, 4600, 4400, 4400, 4200, 4000, 4000, 3600, 3600, 3300, 3200, 3000]
True
uj5u.com熱心網友回復:
如何使用串列推導式,將每個like轉換為 a并且僅在乘以一千后才float轉換為最后:int
likes = [
'82.3k', '20k', '18.2k', '17.4k', '14.2k', '13.8k', '13k', '11.4k', '9.2k',
'8.7k', '8k', '7.1k', '6.8k', '5.7k', '5.2k', '4.9k', '4.8k', '4.6k',
'4.6k', '4.6k', '4.4k', '4.4k', '4.2k', '4k', '4k', '3.6k', '3.6k', '3.3k',
'3.2k', '3k'
]
expected_likes_clean = [
82300, 20000, 18200, 17400, 14200, 13800, 13000, 11400, 9200, 8700, 8000,
7100, 6800, 5700, 5200, 4900, 4800, 4600, 4600, 4600, 4400, 4400, 4200,
4000, 4000, 3600, 3600, 3300, 3200, 3000
]
likes_clean = [int(float(like[:-1]) * 1000) for like in likes]
print(f'{likes_clean = }')
print(f'{expected_likes_clean == likes_clean = }')
輸出:
likes_clean = [82300, 20000, 18200, 17400, 14200, 13800, 13000, 11400, 9200, 8700, 8000, 7100, 6800, 5700, 5200, 4900, 4800, 4600, 4600, 4600, 4400, 4400, 4200, 4000, 4000, 3600, 3600, 3300, 3200, 3000]
expected_likes_clean == likes_clean = True
uj5u.com熱心網友回復:
這是因為 int() 只需要一個字串或類似位元組的物件或實數。
但是您已將串列放入 int() 中。它不會將該串列轉換為整數串列,因為它將字串轉換為 int。
您的問題可以如下解決。
likes = ['82.3k', '20k', '18.2k', '17.4k', '14.2k', '13.8k', '13k', '11.4k', '9.2k',
'8.7k', '8k', '7.1k', '6.8k', '5.7k', '5.2k', '4.9k', '4.8k', '4.6k', '4.6k', '4.6k',
'4.4k', '4.4k', '4.2k', '4k', '4k', '3.6k', '3.6k', '3.3k', '3.2k', '3k']
likes_clean = [82300,20000,18200,17400,14200,13800,13000,11400,9200,8700,8000,7100,6800,5700,5200,4900,4800,4600,4600,4600,4400,
4400,4200,4000,4000,3600,3600,3300,3200,3000]
def likes_count(lks):
output=[]
for like in lks:
if(like[-1]=="k"):
output.append(int(float(like[0:-1])*1000))
return output
print(likes_count(likes))
輸出
[82300, 20000, 18200, 17400, 14200, 13800, 13000, 11400, 9200, 8700, 8000, 7100, 6800, 5700, 5200, 4900, 4800, 4600, 4600, 4600, 4400, 4400, 4200, 4000, 4000, 3600, 3600, 3300, 3200, 3000]
我注意到了另一個問題。
您在 likes_count 函式中將喜歡分配給 lks,這是沒有用的,因為喜歡串列是您在呼叫該方法時作為引數傳遞的串列。
這意味著在函式中它會自動獲取喜歡串列并分配給 lks 變數。但是您再次將相同的喜歡串列分配給 lks。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483323.html
標籤:python-3.x 列表 功能 类型错误
