2017-02-21 46 views
0

我是一個Python初學者,我有一個任務,我需要創建我自己的函數來查找列表的總和和意思。我試圖使下面的公式:Python:操作數錯誤,當我嘗試運行找到總和和意思

import math 

list1 = ['ABC123', 0.00095, 0.00081, 0.0023, 0.00209, 0.0017, 0.00215, 0.00167, 0.00164, 0.00206, 0.00233, 0.00239, 0.00242, 0.0023, 9e-05, 0.00177, 0.001] 

def samplesum(my_list): 
    '''Finds the sum of a list''' 
    total_sum = 0 
    for element in my_list: 
     total_sum += element 
    return total_sum 


def samplemean(my_list): 
    """Finds the mean of a list""" 
    sum_of_num = sum(my_list) 
    list_mean = sum_of_num/len(my_list) 
    return list_mean 

samplesum(list1) 
samplemean(list1) 

當我運行該腳本,我得到這個錯誤信息:

File "Task.py", line 136, in <module> 
    samplesum(list1) 
File "Task.py", line 120, in samplesum 
    total_sum += element 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

,或者如果我出靜音使用#samplesum(my_list)功能,我會得到這個錯誤samplemean(my_list)

File "Task.py", line 137, in <module> 
    samplemean(list1) 
File "Task.py", line 125, in samplemean 
    sum_of_num = sum(my_list) 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

我在做什麼錯?

更新:正如幾個意見指出,事實證明,除了整數之外,我有一個單一的字符串在該列表中。我通過重新定義沒有字符串的列表來刪除它,但我認爲這被認爲是硬編碼,而賦值指令不允許硬編碼。如何使Python使用這些公式忽略列表中的字符串?

+0

看起來像'list1'至少有一個元素是一個字符串。如何創建'list1'? – Lucas

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。特別是,您的發佈代碼不會重現該問題,因爲您的代碼在第一個可執行文件行中死亡。 – Prune

+0

@biocoder你可以發佈list1的內容嗎? –

回答

1

更新:

根據你的問題的更新,你可以實現它:

>>> mylist = [1,2,3,"4", "str"] 
>>> [int(x) for x in mylist if str(x).isdigit()] ------> ONE 
[1, 2, 3, 4] 
>>> [int(x) for x in mylist if isinstance(x, int) ] ------>TWO 
[1, 2, 3] 

例如ONE: 去除串str,但保持和轉換數字字符串"4"到整數4

例如TWO:只保留所有整數

原文:

Python不支持數字串和整數之間的加成,你必須對所有數字字符串轉換爲整數,然後把它們加起來

轉換您mylist的所有元素爲int:

mylist = [int(v) for v in mylist] 

或者您也可以通過list1之前全部轉換到你samplesum()一個第二samplemean

list1 = [int(v) for v in list1] 

然後

for element in mylist: 
    total_sum += element 
+0

事實證明,我在該列表中只有一個字符串。我通過重新定義沒有它的列表來刪除它,但我認爲這被認爲是硬編碼,分配指令不鼓勵硬編碼。你在向我展示如何讓Python忽略列表中的字符串?或者你會怎麼做? – biocoder

+0

我以爲你在你的列表中有數字字符串。例如'「1」+ 1'會拋出類型錯誤。這就是爲什麼我提到將「數字字符串」轉換爲整數而不是將字符串轉換爲整數的原因。很高興您解決了您的問題 – haifzhan

+0

請查看我更新的問題以查看我正在使用的列表。你知道如何讓函數跳過字符串,所以我不必重新定義列表? – biocoder

0

考慮到更新的問題,你能想到的問題是:

  • 忽略字符串
  • 只考慮數字

這些將是兩個選項:

# only consider numbers 
list1 = [x for x in list1 if isinstance(x, (int, float, long))] 

# ignore strings 
list1 = [x for x in list1 if not isinstance(x, basestring)] 
+0

它的工作!謝謝。 – biocoder

相關問題