2016-07-29 12 views
-1

リスト内の文字の組み合わせを数えようとしました。私のスクリプトでは、タプルを数えることができますが、私はリスト内の文字の合計をどのように数えることができるのか分かりません。Pythonで3つのタプルを組み合わせる方法

これは私が使用したスクリプトです。

def count(num): 
    character = 0 
    for i in num: 
     character += 1 
    return character 

count ('1234','1234',1234') 

私の答えは、私はそれを行うことができますどのように12を表示したい3

のですか?

+1

'character + = len(i)'? – mgilson

+3

また、あなたのコード_actually_があなたに3の答えを与えるのではないかと疑いがあります.3つの引数で 'count'を呼び出しているので、' TypeError'を与えるように見えます。 – mgilson

答えて

3
def count(num): 
    total = 0 
    for i in num: 
     total += len(i) 
    return total 

あるいは、短く、より多くの神託:

def count(num): 
    return sum(len(x) for x in num) 

また、あなたは、例えば、リストやタプルの引数でそれを呼び出す必要があります

また、メソッド定義(def count(* num))にスターを追加して、同じ方法で呼び出すことができるようにすることもできます(例:count count(( '' 1234 '、' 1234 '、' 1234 '))元々。

+1

sum map(len、num)) – mtadd

3

それはより多くの慣用的な感じので、私はジェームズの方法を好むだろうが、これは機能的なアプローチは次のようになります。あなたは、これがcount('1234', '1234', '1234')代わりのcount(('1234', '1234', '1234'))を呼び出すことで仕事をしたい場合は、次のことができ

def count(num): 
    return sum(map(len, num)) 

def count(*num)で関数を定義します。あなたが機能を必要としている場合

def count(*num): 
    return sum(len(n) if isinstance(n, str) else count(*n) for n in num) 
+0

この方法も高速ですが、それは間違いなく良い方法です。私は私が一般的に読みやすいと思っていますが、実際に大規模なデータセットでこれをやっていたのであれば、私はこのメソッドを使うでしょう。 – James

+1

@Jamesあなたはこれがより高速であることについて確かですか?私は、発電機の解説がかなりうまく最適化されたと思った。 – L3viathan

+0

[Slightly、yeah](http://stackoverflow.com/questions/1247486/python-list-comprehension-vs-map)。彼らはかなりよく最適化されています。差異マップの種類は非常にめったに役に立たないでしょう。 – James

0

:あなたはそれらの呼び出しの両方が仕事をしたい(そしてあなたは、原子の種類が唯一のこれまでの文字列であることを確認している)場合

最後に、あなたはこれを行うことができます次の定義を使用できます(mylistがネストされたリストでない限り)。

def countchars(mylist): 
    return sum([len(item) for item in mylist]) 

代わりに、マージされたタプル/リストの長さを取得するために)一緒にタプル/リストをマージとlenを(使用することができます。

+0

これは最初に新しいリストを作成する必要があるという欠点があります。発電機の理解をより良く使用する。 – L3viathan

+1

また、計算後に結果を返さないという欠点があります;) –

+0

修正済み、これらのタイプミス... –

関連する問題