-2

たとえば、リストを変換するにはどうすればよいですか。

['2', '5', '2', '5', '5', '3']

次のようなものに:

2^2 * 5^3 * 3?

私の考えは、同じ数が複数ある場合、それらを 5^3 (スリーファイブ) のようなものにマージすることでした。

4

3 に答える 3

6

collections.Counterオブジェクトを使用できます:

>>> from collections import Counter
>>> counts = Counter(['2', '5', '2', '5', '5', '3'])
>>> counts
Counter({'5': 3, '2': 2, '3': 1})
>>> ' * '.join(['{}^{}'.format(k, v) for k, v in counts.most_common()])
'5^3 * 2^2 * 3^1'

または、ドロップするのがもう少し複雑1です:

>>> ' * '.join(['{}^{}'.format(k, v) if v > 1 else k for k, v in counts.most_common()])
'5^3 * 2^2 * 3'

このCounter.most_common()メソッドは、カウントごとに降順でソートしてカウントを返しますが、通常の辞書アクセスを使用して、数値とカウントのペアを任意の順序でリストすることもできます。

于 2013-07-20T11:42:29.963 に答える
1
>>> A = ['2', '5', '2', '5', '5', '3']
>>> print(*[('%s^%i' % (i,A.count(i))) for i in set(A)] , sep = ' * ')
5^3 * 2^2 * 3^1

set(A) 内の各一意の要素の数を取得し (これによりすべての数値が得られます)、それを要素自体のタプルに入れることによって機能します。[2,2] -> (セット) {2}。これを繰り返して (2,[2,2].count(2)) になります

于 2013-07-20T11:48:07.020 に答える
0
from collections import Counter

dataset = ['2', '5', '2', '5', '5', '3']

factorials = Counter(dataset)

output_parts = []
for base, exponent in factorials.items():
    if exponent == 1:
        output_parts.append(base)
    else:
        output_parts.append("%s^%s" % (base, exponent))

output = ' * '.join(output_parts)
print(output)

あなたにあげる:

3 * 2^2 * 5^3
于 2013-07-20T11:46:37.877 に答える