1

[] 形式で数値のリストを入力するようにユーザーに要求するプログラムを Python で作成しようとしています。

次に、リスト内のこれらの数値のうち、1 から 10、10 から 20、20 から 30 などの数を数えて表示する必要があります。

これが私がこれまでに持っているものです。

my_num = [int(i) for i in raw_input("Enter numbers... ").split(",")]

the_list = eval(my_num)

number = 0

if 1<= my_num and my_num <=10:
    number = number + 1
4

6 に答える 6

5
import itertools

numbers = sorted(map(int, raw_input().split(",")))
for k, g in itertools.groupby(numbers, lambda x: x // 10):
    print k, list(g)

これにより、番号のグループが得られ、 への呼び出しでグループ内のインスタンスを数えることができますlen()。たとえば、

    # print k, list(g)
    print k, len(list(g))

重要なことは、最初に数字をソートすることです。

これを入力として:

1, 5, 6, 89, 43, 43, 25, 76, 12, 32, 23, 25, 27, 13, 5, 7

0 [1, 5, 5, 6, 7]
1 [12, 13]
2 [23, 25, 25, 27]
3 [32]
4 [43, 43]
7 [76]
8 [89]

または、代わりに len 呼び出しを使用した出力:

0 5
1 2
2 4
3 1
4 2
7 1
8 1

次に、次のようにフォーマットできます。

print "%d - %d: %d" % (k * 10 + 1, (k + 1) * 10, len(list(g))

収量:

 1 - 10: 5
11 - 20: 2
21 - 30: 4
31 - 40: 1
41 - 50: 2
71 - 80: 1
81 - 90: 1 
于 2012-08-30T22:48:40.330 に答える
2

Counterリストを 1 回反復処理するだけでよいため、a を使用すると効率的です。

>>> L = [1, 5, 6, 89, 43, 43, 25, 76, 12, 32, 23, 25, 27, 13, 5, 7]
>>> from collections import Counter
>>> Counter(x//10 for x in L)
Counter({0: 5, 2: 4, 1: 2, 4: 2, 3: 1, 7: 1, 8: 1})
>>> sorted(Counter(x//10 for x in L).items())
[(0, 5), (1, 2), (2, 4), (3, 1), (4, 2), (7, 1), (8, 1)]

>>> for k,v in sorted(Counter(x//10 for x in L).items()):
...     print "%d - %d: %d"%(k*10, k*10+9, v)
...
0 - 9: 5
10 - 19: 2
20 - 29: 4
30 - 39: 1
40 - 49: 2
70 - 79: 1
80 - 89: 1
于 2012-08-30T23:15:35.163 に答える
1

使用len()とリストの理解:

>>> lis=[1, 5, 6, 89, 43, 43, 25, 76, 12, 32, 23, 25, 27, 13, 5, 7]

>>> [(i,[x for x in lis if x//10==i]) for i in range(0,(max(lis)//10)+1)]
[(0, [1, 5, 6, 5, 7]), (1, [12, 13]), (2, [25, 23, 25, 27]), (3, [32]), (4, [43, 43]), (5, []), (6, []), (7, [76]), (8, [89])]

長さの使用len():

>>> [(i,len([x for x in lis if x//10==i])) for i in range(0,(max(lis)//10)+1)]
[(0, 5), (1, 2), (2, 4), (3, 1), (4, 2), (5, 0), (6, 0), (7, 1), (8, 1)]
于 2012-08-30T22:45:41.120 に答える
0

これを行うための最も簡単な方法である必要はありませんast.literal_evalが、はの代わりに使用できますeval

10個の数字の各グループにいくつあるかを数えることに関して、itertoolsモジュールにはitertools.groupby

import ast
import itertools


the_input = raw_input("Enter numbers... ")

# Lazy way to parse '[1,2,3]' into [1,2,3]
the_list = ast.literal_eval(the_input)

# Or, parse it manually (this is probably better in this case):
the_list = [int(x) for x in the_input.strip("[]").split(",")]

# Group by dividing number by 10, the result as an integer (15//10==1)
# This means 0-9 are in "group 0", 10-19 are in "group 1" etc
groups = itertools.groupby(the_list, key = lambda k: k // 10)

# Show stats for each block of ten
for group_count, group_members in groups:
    print "There were {count} numbers in {start}-{end}".format(
        count = len(list(group_members)),
        start = group_count * 10, # 15/10 becomes 1, then we do 1*10 for 10
        end = group_count * 10 + 9) # and 1*10+9 to get 19 (displayed as "in 10-19"

実行例:

$ python script.py
Enter numbers... [1,2, 11,12,13, 22,23, 44,45,46,47]
There were 2 numbers in 0-9
There were 3 numbers in 10-19
There were 2 numbers in 20-29
There were 4 numbers in 40-49

グループ1-10、11-20などに微調整するには、次のgroup =ように線を変更します。

groups = itertools.groupby(the_list, key = lambda k: k // 10 + 1)

または、もう少し簡単です。

the_input = raw_input("Enter numbers... ")

# Parse "[1,2,3]" into a list of numbers
the_list = [int(x) for x in the_input.strip("[]").split(",")]

group_counter = {}

for number in the_list:
    group_start = (number // 10) * 10
    group_end = group_start + 9
    group_name = "%s-%s" % (group_start, group_end)

    group_counter.setdefault(group_name, 0)
    group_counter[group_name] += 1


for name, count in group_counter.items():
    # Note that the sorting is wrong
    print "There were %s in %s" % (count, name)

collections.CounterPython2.7以降を使用している場合にも使用できます

于 2012-08-30T23:11:55.217 に答える
0

私が理解していれば、[1;10]​​、[11; 20]; [21; 30]、...、[91; 100]

# Example of user input
your_list = [2, 10, 93, 1, 20]

# All the ranges' right part (sorry if my english is bad). my_ranges = [10, 20, 30, ..., 100]
my_ranges = []

# Array determining how many of those numbers in the list are in [1; 10], [11; 20], ..., [91; 100]
numbers = []

for i in range(1, 11):
    my_ranges.append(i*10)
    numbers.append(0)

for i in range(0, len(your_list)):
    out = False
    j = 0
    while not out and j<len(my_ranges):
        if your_list[i] <= my_ranges[j]:
            out = True
            numbers[j]+=1
        j+=1

for i in range(0, len(numbers)):
    print "Number of numbers in ["+str(my_ranges[i]+1-10)+";"+str(my_ranges[i])+"] = "+str(numbers[i])
于 2012-08-30T23:07:28.557 に答える