たとえば、リストを変換するにはどうすればよいですか。
['2', '5', '2', '5', '5', '3']
次のようなものに:
2^2 * 5^3 * 3
?
私の考えは、同じ数が複数ある場合、それらを 5^3 (スリーファイブ) のようなものにマージすることでした。
たとえば、リストを変換するにはどうすればよいですか。
['2', '5', '2', '5', '5', '3']
次のようなものに:
2^2 * 5^3 * 3
?
私の考えは、同じ数が複数ある場合、それらを 5^3 (スリーファイブ) のようなものにマージすることでした。
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()
メソッドは、カウントごとに降順でソートしてカウントを返しますが、通常の辞書アクセスを使用して、数値とカウントのペアを任意の順序でリストすることもできます。
>>> 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)) になります
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