繁体   English   中英

Python 类型错误:列表索引必须是整数,而不是 str

[英]Python TypeError: list indices must be integers, not str

我有一个名字列表:

geneNameList = ['psaA', 'psbF', 'rpl36', 'rpoC1', 'psbK', 'atpB']

和职位列表:

positionList = ['_1stpos', '_2ndpos', '_3rdpos']

我正在尝试将 position 列表中的字符串添加到我的名称列表中的每个名称中,这样我最终会得到一个 partitionList:

partitionList = ['psaA_1stpos', 'psaA_2ndpos', 'psaA_3rdpos', psbF_1stpos', 'psbF_2ndpos'... 'atpB_3rdpos']

我有这个代码:

partitionList = []
for i in geneNameList:
    for k in positionList:
        partition = geneNameList[i] + positionList[k] + ' = '
        partitionList.append(partition)

但我不断收到此错误:

    partition = geneNameList[i] + positionList[k] + ' = '
TypeError: list indices must be integers, not str
  • geneNameList[i] + positionList[k] + ' = '更改为i + k以添加每个列表的值。
    • geneNameList[i]意味着您正在尝试根据它在列表中的索引来获取一个值。
    • 您已经在迭代这些值,因此您不需要为列表编制索引。
    • 具体来说, TypeError是因为您使用值而不是 integer 来索引列表。 (例如geneNameList['psaA']而不是geneNameList[0]
  • 这只是解决了您的代码问题,而不会改变您的编写方式。
positionList = ['_1stpos', '_2ndpos', '_3rdpos']
geneNameList = ['psaA', 'psbF', 'rpl36', 'rpoC1', 'psbK', 'atpB']

partitionList = []
for i in geneNameList:
    for k in positionList:
        partition = i + k
        partitionList.append(partition)

print(partitionList)

['psaA_1stpos',
 'psaA_2ndpos',
 'psaA_3rdpos',
 'psbF_1stpos',
 'psbF_2ndpos',
 'psbF_3rdpos',
 'rpl36_1stpos',
 'rpl36_2ndpos',
 'rpl36_3rdpos',
 'rpoC1_1stpos',
 'rpoC1_2ndpos',
 'rpoC1_3rdpos',
 'psbK_1stpos',
 'psbK_2ndpos',
 'psbK_3rdpos',
 'atpB_1stpos',
 'atpB_2ndpos',
 'atpB_3rdpos']

您可以使用itertools.product创建每个基因名称和位置的叉积,然后join它们连接到列表推导中以生成您的partitionList

import itertools

geneNameList = ['psaA', 'psbF', 'rpl36', 'rpoC1', 'psbK', 'atpB']

positionList = ['_1stpos', '_2ndpos', '_3rdpos']

partitionList = [''.join(gp) for gp in itertools.product(geneNameList, positionList)]

print(partitionList)

Output:

[
 'psaA_1stpos', 'psaA_2ndpos', 'psaA_3rdpos',
 'psbF_1stpos', 'psbF_2ndpos', 'psbF_3rdpos',
 'rpl36_1stpos', 'rpl36_2ndpos', 'rpl36_3rdpos',
 'rpoC1_1stpos', 'rpoC1_2ndpos', 'rpoC1_3rdpos',
 'psbK_1stpos', 'psbK_2ndpos', 'psbK_3rdpos',
 'atpB_1stpos', 'atpB_2ndpos', 'atpB_3rdpos'
]

如果您想要在每个字符串的末尾添加= ,只需将理解中的''.join(gp)更改为''.join(gp) + ' = '

您正在迭代对象,而不是整数。

Python 的工作原理如下:

假设你有一个列表

[猫(具有它属性的 object)、狗、人]

如果你做:

for i in list: 

您将遍历 cat、dog 和 human,但不会遍历列表的索引。

你必须这样做:

for i in range(0, len(list)): 

所以,现在您正在迭代整数(列表索引)而不是对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM