在for循环中递增变量

时间:2016-11-08 20:42:54

标签: python loops iteration increment

我是Python的新手,正在试图弄清楚如何解决以下问题。我有两个列表,list1看起来像这样:

[pytest]
addopts = --reuse-db
DJANGO_SETTINGS_MODULE=mysite.settings

list2看起来像这样:

['10','12','12','23]

我还有一个由以下键值组成的字典:

['15','16','13','15']

此词典中的键由list1中的那些元素组成。 list1中的每个元素也与list2中的单个元素相关联(按顺序,list1中的' 10与list2中的''' 12' ;在list1中,列表2中包含' 16'等等。

对于list1中的每个元素,我想获取相关的字典值,并使用list2中的关联元素将字符插入特定位置以确定位置。到目前为止,我一直在研究for循环:

dictionary = {
'10': 'AATGCGTAAGCTAGCGATAGATGCAACGTT', 
'12': 'GGTCAGAGTTTATCGGTATGTTAGCATGGA', 
'23': 'ATGGGCGCGTATATTAAAGGCGCCGCCCTG'
}

我希望我的最终输出看起来像这样:

for i in list1:
    dict_key = dictionary.get(i)
    pos = int(list2[0])
    full = dict_key[:pos] + '[' + dict_key[pos] + ']' +  dict_key[(pos+1):]
    print(full)

但我的输出目前看起来像这样,因为我特别要求list2中的索引0:

AATGCGTAAGCTAGC[G]ATAGATGCAACGTT
GGTCAGAGTTTATCGG[T]ATGTTAGCATGGA
GGTCAGAGTTTAT[C]GGTATGTTAGCATGGA
ATGGGCGCGTATATT[A]AAGGCGCCGCCCTG

我想在循环的每次迭代中将list2中要求的元素增加1,但我似乎无法弄明白。我应该使用范围定义新变量吗?任何意见将不胜感激!

3 个答案:

答案 0 :(得分:2)

只需将for i in list1:更改为for i, pos in zip(list1, list2):,然后在循环的第二行中删除pos的分配。 zip会让您一次遍历两个列表。

答案 1 :(得分:1)

使用enumerate在这种情况下很有用 - 它会为您提供一个元组,其中包含每个元素的位置以及元素本身。请注意,我已将i的含义更改为元素的位置而非元素。

您的变量dict_key可能会更好地称为dict_value,因为list1中的元素实际上是您在dictionary中查找的关键字。

for i, el in enumerate(list1):
    dict_value = dictionary.get(el)
    pos = int(list2[i])
    full = dict_value[:pos] + '[' + dict_value[pos] + ']' +  dict_value[(pos+1):]
    print(full)

答案 2 :(得分:0)

您可以为列表构建迭代器(int(i) for i in list2,例如迭代list2,在途中将其值转换为int)并使用zip成对读取它们

list1 = ['10','12','12','23']
list2 = ['15','16','13','15']

dictionary = {
'10': 'AATGCGTAAGCTAGCGATAGATGCAACGTT', 
'12': 'GGTCAGAGTTTATCGGTATGTTAGCATGGA', 
'23': 'ATGGGCGCGTATATTAAAGGCGCCGCCCTG'
}

for val, pos in zip((dictionary[j] for j in list1), (int(i) for i in list2)):
    full = val[:pos] + '[' + val[pos] + ']' +  val[(pos+1):]
    print(full)

有些人更喜欢使用字符串格式来构建结果字符串

full = '{}[{}]{}'.format(val[:pos], val[pos], val[pos+1:]) 

但这是个人品味。