【问题标题】:Unique index values to every element in a python listpython列表中每个元素的唯一索引值
【发布时间】:2019-09-19 16:57:28
【问题描述】:

我试图仅将列表中的某个数字与偶数索引号相乘。 我的列表中有一些出现多次的数字。这些数字具有相同的索引值。但是,只有当它们出现在索引号为偶数的位置时,我才想将这些数字乘以 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]

【问题讨论】:

    标签: python list indexing


    【解决方案1】:

    您应该使用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】:

      你只是在你的 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)
      

      【讨论】:

        【解决方案3】:

        其他答案解决了根本问题(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】:

          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)
          

          【讨论】:

            【解决方案5】:

            只需将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)
            

            【讨论】:

              【解决方案6】:

              这里有两个主要问题。正如其他人所提到的,您需要将 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)
              

              【讨论】:

                猜你喜欢
                • 2016-11-02
                • 1970-01-01
                • 2021-09-30
                • 2022-12-01
                • 2019-11-11
                • 1970-01-01
                • 2021-11-15
                • 1970-01-01
                • 2020-12-15
                相关资源
                最近更新 更多