【问题标题】:Replaced elements of a list do not carry over outside for loop Python列表的替换元素不会在 for 循环 Python 之外结转
【发布时间】:2021-03-21 04:24:19
【问题描述】:

我正在尝试将数字列表转换为字母,我想知道为什么我的转换没有在我的 for 循环之外进行。范围有错误吗?我为任何写得不好的代码道歉,我是学习 Python 的新手。非常感谢。

cstring = [0, 3, 2, 1, 0, 0, 1, 3]

for number in cstring:
    if number == 0:
        number = 'A'
    elif number == 1:
        number = 'C'
    elif number == 2:
        number = 'G'
    elif number == 3:
        number = 'T'

print(cstring)

输出为 0 3 2 1 0 0 1 3。应该是 ATGCAACT。

【问题讨论】:

    标签: python list variables indexing scope


    【解决方案1】:

    你可以使用枚举和索引替换!!

    cstring = [0, 3, 2, 1, 0, 0, 1, 3]
    
    for num,ele in enumerate(cstring):
        if ele == 0:
            cstring[num] = 'A'
        elif ele == 1:
            cstring[num] = 'C'
        elif ele == 2:
            cstring[num] = 'G'
        elif ele == 3:
            cstring[num] = 'T'
    
    print("".join(cstring))
    

    【讨论】:

    • 在迭代列表时修改列表不是一个好主意。在这种情况下它不会受到伤害,但这不是一个好习惯。
    • 感谢您的建议,我刚刚阅读了一些相关的内容,我会牢记在心!!
    【解决方案2】:

    当您说number = 'A' 时,您只是在更改number 变量的值。该变量与旧列表无关。处理此类问题的最佳方法是使用新值建立一个新列表:

    cstring = [0, 3, 2, 1, 0, 0, 1, 3]
    dna = []
    
    for number in cstring:
        if number == 0:
            dna.append('A')
        elif number == 1:
            dna.append('C')
        elif number == 2:
            dna.append('G')
        elif number == 3:
            dna.append('T')
    print(dna)
    

    但还有更好的方法。

    dna = ["ACGT"[number] for number in cstring]
    

    【讨论】:

      【解决方案3】:

      for 循环将数组中的每个值复制到循环变量number 中。因为我们只是复制值,所以像 number = 'A' 这样的赋值对原始数组没有影响。

      相反,您应该对数组本身使用赋值,即改用 cstring[i] = 'A' 之类的东西。尝试将 for 循环更改为

      for i in range(len(cstring)):
      

      【讨论】:

        【解决方案4】:

        为了改变数组中的变量,你必须定义它的索引。您可以通过创建一个沿代表当前索引的 for 循环移动的变量来做到这一点。

        cstring = [0, 3, 2, 1, 0, 0, 1, 3]
        
        i = 0
        for number in cstring:
        i += 1
            if number == 0:
                number[i] = 'A'
            elif number == 1:
                number[i] = 'C'
            elif number == 2:
                number[i] = 'G'
            elif number == 3:
                number[i] = 'T'
        
        print(cstring)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多