python列表中每个元素的唯一索引值

时间:2019-05-01 02:28:40

标签: python list indexing

我正在尝试仅将列表中的某些数字与偶数索引数字相乘。 我的列表中有多次重复出现的数字。这些数字具有相同的索引值。但是,我只想将这些数字乘以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]

6 个答案:

答案 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)