我正在尝试仅将列表中的某些数字与偶数索引数字相乘。 我的列表中有多次重复出现的数字。这些数字具有相同的索引值。但是,我只想将这些数字乘以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]
Got = [50, 52, 54, 52, 52, 54]
答案 0 :(得分:2)
您仅要追加到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 :(得分:2)
您应该使用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 :(得分:1)
您缺少要添加条件条件的列表
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)
答案 3 :(得分:1)
其他答案是针对基本问题(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))]
答案 4 :(得分:0)
只需在您的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)
答案 5 :(得分:0)
这里有两个主要问题。如其他人所述,您需要将append
移动到else分支之外。您还需要在遍历列表元素时丢弃它的当前索引,然后使用a.index(i)
查找它-在重复元素的情况下,这不会给出正确的结果,因为它将返回索引 first 匹配。您可以例如使用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)