2011-10-30 18 views
0

私は、順不同のペアの数を返す関数を作成しようとしています。順不同のエントリのペアを見つける

たとえば、この関数は、引数'DCBA'には6を返します。

これまで私のコードは次のとおり

def calc_out_of_order_pairs(s): 
    res = [] 
    sum = 0 
    for i in s: 
     for j in s: 
      res.append(i+j) 

    for test in res: 
     if pair[0] > pair[1]: 
      sum +=1 

    return sum 
+0

お勧めの読書:http://docs.python.org/howto/functional.html – tokland

答えて

3
>>> from itertools import combinations 
>>> sum(x>y for x,y in combinations("DCBA",2)) 
6 

ヒント:このような組み合わせを使用して第二

>>> list(combinations("DCBA", 2)) 
[('D', 'C'), ('D', 'B'), ('D', 'A'), ('C', 'B'), ('C', 'A'), ('B', 'A')] 

よりペアの最初の以前の文字列で発生する各ペアを返します初心者の方がやりやすい別の方法があります。

>>> s = "DCBA" 
>>> count = 0 
>>> for i in range(len(s)-1): 
... for j in range(i+1, len(s)): 
...  if s[i]>s[j]: 
...  count += 1 
... 
>>> count 
6 
+0

優れた答え。 'itertools.combinations()'はPython 2.6以降で利用可能です。 –

+0

この問題を解決する簡単な方法はありますか?私はちょうどPythonを学び始めました。 – user1021090

+0

@ user1021090:事はあなたが数学的な概念を扱っていることです。そのため、組み合わせ、リスト内包や集計などの方法を使用することができます。チュートリアルを調べて、言語に慣れていないかを確認してください。しかし、(x、y)の組み合わせ( "DCBA"、2)の場合、Pythonの暗黙の変換True-> 1、False-> 0を使用しないことをお勧めします。 ) ' – tokland

関連する問題