Как получить другой результат? - PullRequest
1 голос
/ 04 августа 2020

Я новичок в программировании python. Я пытался написать программу, чтобы узнать, сколько девяток присутствует в списке. введите описание изображения здесь

seq = [1, 2, 3, 4, 9, 6, 8, 13, 9, 12, 19]
n = 0
t = []
y = len(seq)
for x in range (0, y-1):
    if seq[x] == 9:
        n += 1
        t.append(x+1) 
    else: continue
print (n, "numbers of 9s are present at", t, "position" )'

вывод: 2 числа девяток присутствуют в [5, 9 ] position

Как я написал программу, чтобы получить вывод, как «2 числа из 9 присутствуют в позиции 5 и 9».

Ответы [ 5 ]

1 голос
/ 04 августа 2020

Вы можете использовать понимание списка. enumerate возвращает элемент (num) списка и индекс элемента (idx), и если элемент (num) равен 9, то список positions будет содержать idx как строка. Индексация начинается с 1 (а не с 0) (start=1). Вы можете получить количество девяток с помощью len(positions), и вы можете присоединиться к элементу с помощью " and ".join(positions).

Код:

seq = [1, 2, 3, 4, 9, 6, 8, 13, 9, 12, 19]
positions = [str(idx) for idx, num in enumerate(seq, start=1) if num == 9]
print("{} numbers of 9s are present at {} positions".format(len(positions), " and ".join(positions)))

Вывод:

>>> python3 test.py 
2 numbers of 9s are present at 5 and 9 positions

Думаю, это самый элегантный способ решить вашу проблему.

1 голос
/ 04 августа 2020
your_list = [4,5,6,7,9,6,7,9]
indexes = []
for i, num in enumerate(your_list, start=1):
    if num == 9:
        indexes.append(i)

def output_list(str_list):
    last_value = str_list[-1]
    first_indexes = str_list[:-1]
    first_indexes_str = ", ".join(first_indexes)
    if len(first_indexes) == 0:
        return f'{len(indexes)} numbers of 9s are present at {last_value} position'
    return f'{len(indexes)} numbers of 9s are present at {first_indexes_str} and {last_value} position'

print(output_list(indexes))

первый пустой список списка индексов.

l oop поверх списка и получить индекс, используя (enumerate).

, если число девять, добавить к список индексов.

после этого распечатайте с помощью f'...' и напечатайте, сколько найти и где.

и добавьте функцию, которая анализирует данные по мере необходимости

0 голосов
/ 04 августа 2020
 seq = [1, 2, 3, 4, 9, 6, 8, 13, 9, 12, 19]

 positions = [i + 1 for i in range(len(seq)) if seq[i] == 9]

 print(f"{len(positions)} numbers of 9s are present at {positions} position")
0 голосов
/ 04 августа 2020

Вы можете использовать locate в модуле more_itertools

from more_itertools import locate

arr = [1, 2, 3, 4, 9, 6, 8, 13, 9, 12, 19]
indices = list(locate(arr, lambda a: a==9))

Вы можете добавить +1 к каждому элементу в индексах, чтобы получить позицию

0 голосов
/ 04 августа 2020

Ну, сначала сделайте для l oop в своем списке, взяв каждый элемент, затем сравните этот элемент с 9, чтобы увидеть, 9 это или нет. Переменная compt будет подсчитывать "9" встреч.

compt = 0
seq = [1, 2, 3, 4, 9, 6, 8, 13, 9, 12, 19]    
for k in seq:
    if(k == 9):
        compt += 1
print(compt)

Если вам также нужен индекс / позиция найденных девяток, сделайте то же самое, перебирая индекс и сохраняя список индексов:

compt = 0
indexlist = []
seq = [1, 2, 3, 4, 9, 6, 8, 13, 9, 12, 19]    
for k in range(0, len(seq)):
    if(seq[k] == 9):
        compt += 1
        indexlist.append(k)
print(str(compt) + " nines founds, in following positions : " + str(indexlist))
...