Я пытаюсь умножить только определенное число в списке с четным порядковым номером. В моем списке есть несколько чисел, которые встречаются несколько раз. Эти числа имеют одинаковые значения индекса. Однако я хочу умножить эти числа на 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 ответов
Вы должны использовать 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))
Просто добавьте 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)
Здесь есть две основные проблемы. Как уже упоминали другие, вам нужно переместить 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)
Другие ответы были связаны с фундаментальной проблемой (расположение 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))]
Вы не можете добавить в список, если условие
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)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.