Python TypeError: индексы списка должны быть целыми числами, а не str - PullRequest
0 голосов
/ 20 июня 2020

У меня есть список имен:

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

и список позиций:

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

Я пытаюсь добавить строки в моем списке позиций к каждому из имен в моем списке имен, поэтому я бы получил 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

Ответы [ 3 ]

1 голос
/ 20 июня 2020

Вы можете использовать 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)

Вывод:

[
 '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) + ' = ' в понимании.

1 голос
/ 20 июня 2020
  • Измените geneNameList[i] + positionList[k] + ' = ' на i + k, чтобы добавить значения каждого списка.
    • geneNameList[i] подразумевает, что вы пытаетесь получить значение на основе его индекса в списке.
    • Вы уже перебираете значения, поэтому вам не нужно индексировать список .
    • В частности, TypeError вызвано тем, что вы индексируете список по значению, а не по целому числу. (например, 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']
0 голосов
/ 20 июня 2020

Вы перебираете объекты, а не целые числа.

Python работает примерно так:

Представьте, что у вас есть список

[cat (объект с его свойствами), dog, human]

если вы сделаете:

for i in list: 

, вы будете перебирать кошку, собаку и человека, но не по индексу списка.

Вы должны сделать это:

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

Итак, теперь вы перебираете целые числа (индекс списка), а не объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...