Уникальные значения индекса для каждого элемента в списке Python - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь умножить только определенное число в списке на четное число.В моем списке есть несколько чисел, которые встречаются несколько раз.Эти числа имеют одинаковые значения индекса.Тем не менее, я хочу умножить эти числа на 2, только если они встречаются в таком месте, что их порядковый номер является четным.

Все форумы, которые я искал, имеют противоположность моей потребности, где они хотят, чтобы повторяющиеся числа имели одинаковый индекс.В моем случае я хочу, чтобы повторяющиеся числа имели разные значения индекса.

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
        my_list.append(a1)

Ожидаемый = [50, 96, 48, 98, 52, 106, 54, 106, 48, 104, 54]

Получил = [50, 52, 54, 52, 52, 54]

Ответы [ 6 ]

3 голосов
/ 01 мая 2019

Вы должны использовать enumerate вместо index.Кроме того, вы можете сделать это понимание списка:

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
result = [ord(c) * 2 if i % 2 == 1 else ord(c) for i, c in enumerate(a)]
print(result)
# [50, 96, 48, 98, 52, 106, 54, 104, 48, 104, 54]

Эквивалентный цикл:

result = []
for i, c in enumerate(a):
    if i % 2 == 1:
         result.append(ord(c) * 2)
    else:
         result.append(ord(c))
2 голосов
/ 01 мая 2019

Вы добавляете только в свою ветку else

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
    my_list.append(a1)
1 голос
/ 01 мая 2019

Другие ответы были получены при фундаментальной проблеме (размещение append()), но если вы хотите быть кричащим, вы можете сделать это в понимании списка в одну строку:

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = [ord(a[i])*2 if i % 2 == 1 else ord(a[i]) for i in range(len(a))]
1 голос
/ 01 мая 2019

Вы отсутствуете, чтобы добавить в список, если условие

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
        my_list.append(a1)
    else:
        a1 = ord(i)
        my_list.append(a1)
0 голосов
/ 01 мая 2019

Здесь есть две основные проблемы.Как уже упоминали другие, вам нужно переместить append за пределы ветви else.Вы также отбрасываете текущий индекс элемента списка, когда просматриваете его, а затем просматриваете с помощью a.index(i) - это не даст правильного результата в случае повторяющихся элементов, потому что он вернет индекс первый матч.Например, вы можете использовать функцию enumerate, чтобы получить индекс и элемент в цикле.

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for idx, i in enumerate(a):
    if idx in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
    my_list.append(a1)
0 голосов
/ 01 мая 2019

Просто добавьте my_list.append(a1) к вашему if заявлению:

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
        my_list.append(a1)
    else:
        a1 = ord(i)
        my_list.append(a1)

Или лучше, просто выполните его после else:

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
    my_list.append(a1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...