0

リストの最後の桁がリストに表示される頻度を取得しようとしていますが、かなりの問題があります。

基本的に、これは私が作成しようとしている関数です:

>>> ones_digit_histogram([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765])
[0.09523809523809523, 0.19047619047619047, 0.047619047619047616, 0.14285714285714285, 0.14285714285714285, 0.14285714285714285, 0, 0.14285714285714285, 0.047619047619047616, 0.047619047619047616]

そして、これは私がこれまでに持っているものです

def last_digit(number):
    last_digit = str(number)[-1]
    last_digit = int(last_digit)
    return last_digit

def ones_digit_of_each_list_item(num_list):    
    returned_list = []
    for list_value in num_list:
        returned_list = (returned_list + [last_digit(list_value)])

    return returned_list

print ones_digit_of_each_list_item([123, 32, 234, 34, 22])

私が抱えている問題は、

ones_digit_of_each_list_item([123, 32, 234, 34, 22])

リスト内の発生頻度(パーセンテージ形式)の検索に含まれます[123, 32, 234, 34, 22]

4

1 に答える 1

1

数値の最後の桁は、数値を 10 で割った剰余であるため、%演算子を使用してより効率的に計算できます。

結果リストを作成するときは、リストを連結するのではなく.append()、新しい値を新しいリストに追加した方がよいでしょう。または、リスト内包表記を使用することをお勧めします。

def last_digit(number):
    return number % 10

def one_digit_of_each_list_number(number_list):
    return [last_digit(number) for number in number_list]

次に、各桁の出現回数を数えるだけでよく (可能な桁は 10 桁しかないため、辞書よりもリストを使用する方が適切です)、項目の総数で割ります。

def ones_digit_histogram(number_list):
    histogram = [0] * 10
    for digit in one_digit_of_each_list_number(number_list):
        histogram[digit] += 1
    return [float(x)/len(number_list) for x in histogram]

次に、例として、次のようになります。

>>> print ones_digit_histogram([123, 32, 234, 34, 22])
[0.0, 0.0, 0.4, 0.2, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0]
于 2013-02-15T09:28:40.077 に答える