嘿,朋友们,我见过一些奇怪的代码。Ampython新手编程代码是
import re, collections
mylist = ['Probes', 'Gene.symbol', 'Gene.Title', 'GO1', 'GO2', 'GO3', 'ADX_KD_06.ip', 'ADX_KD_24.ip', 'ADX_LG_06.ip', 'ADX_LG_24.ip', 'ADX_LV_06.ip', 'ADX_LV_24.ip', 'ADX_SP_06.ip', 'ADX_SP_24.ip', 'ADX_LN_06.id', 'ALM_LN_06.id', 'ALM_LV_06.ip', 'ALM_SP_06.ip', 'K3SPG_LV_06.ip', 'K3SPG_SP_06.ip', 'KKK_LN_06.id', 'KKK_LV_06.ip', 'KKK_SP_06.ip', 'ENDCN_LV_06.in', 'ENDCN_SP_06.in', 'bCD_LV_06.ip', 'bCD_SP_06.ip', 'ADX_LV_06.id', 'ADX_SP_06.id', 'ALM_LV_06.id', 'ALM_SP_06.id', 'D35_LN_06.id', 'K3SPG_LN_06.id', 'K3_LV_06.id', 'K3_SP_06.id', 'bCD_LN_06.id', 'D35_LV_06.id', 'D35_SP_06.id', 'K3SPG_LV_06.id', 'K3SPG_SP_06.id', 'bCD_LV_06.id', 'bCD_SP_06.id', 'ENDCN_KD_06.in', 'ENDCN_LG_06.in', 'Probes', 'Gene.symbol', 'ADX_KD_06.ip', 'ADX_KD_24.ip', 'ADX_LG_06.ip', 'ADX_LG_24.ip', 'ADX_LV_06.ip', 'ADX_LV_24.ip', 'ADX_SP_06.ip', 'ADX_SP_24.ip', 'ADX_LN_06.id', 'ALM_LN_06.id', 'ALM_LV_06.ip', 'ALM_SP_06.ip', 'K3SPG_LV_06.ip', 'K3SPG_SP_06.ip', 'KKK_LN_06.id', 'KKK_LV_06.ip', 'KKK_SP_06.ip', 'ENDCN_LV_06.in', 'ENDCN_SP_06.in', 'bCD_LV_06.ip', 'bCD_SP_06.ip', 'ADX_LV_06.id', 'ADX_SP_06.id', 'ALM_LV_06.id', 'ALM_SP_06.id', 'D35_LN_06.id', 'K3SPG_LN_06.id', 'K3_LV_06.id', 'K3_SP_06.id', 'bCD_LN_06.id', 'D35_LV_06.id', 'D35_SP_06.id', 'K3SPG_LV_06.id', 'K3SPG_SP_06.id', 'bCD_LV_06.id', 'bCD_SP_06.id', 'ENDCN_KD_06.in', 'ENDCN_LG_06.in']
regex = re.compile(r'([\w\d]+)_(\w\w)_(\d\d)\.(\w\w)')
first_part_dict = collections.defaultdict(list)
second_part_dict = collections.defaultdict(list)
cutoff_index = mylist.index('Probes', 1)
for i, string in enumerate(mylist):
matched = regex.match(string)
if not matched:
continue
rg1, rg2, rg3, rg4 = matched.groups()
key = rg1 + rg3
if i < cutoff_index:
first_part_dict[key].append(i)
else:
second_part_dict[key].append(i)
我们可以看到上面的列表被分为两部分,由‘Probes’分隔基因符号', '吉恩。头衔'、'GO1'、'GO2'、'GO3'和'Probes'、'基因符号'. 你知道吗
第一部分和第二部分组件的正则表达式是:
([\w\d]+)_(\w\w)_(\d\d)\.(\w\w)
rg1 rg2 rg3 rg4
它应该匹配这样的字符串ADX_SP_06.ip
或K3SPG_LN_06.id
我的问题是..我不理解代码中first_part_dict[key].append(i)
的用法。我知道我是作为索引给出的给你。我是正则表达式不太好,我认为匹配的部分是数字。所以呢键将充当一个数字,第一部分是一个数字字典。是吗索引i的值存储到字典的第一部分??。。你知道吗
我真的很困惑..请帮我理解这个..任何帮助将不胜感激..并为这个漫长的问题道歉。。你知道吗
所使用的字典是一个以文本/字符串键和列表作为值的字典。你知道吗
first_part_dict[key].append(i)
所做的是将i
的值附加(或添加)到与字典first_part_dict
的键key
对应的列表中。你知道吗如果键是
ADX06
,那么字典将从{'ADX06': []}
转到{'ADX06': [1]}
,如果i
的值是1。你知道吗我将放一个演练来说明:
当您第一次通过循环时,会得到
i = 0
和string = 'Probes'
。由于Probes
与regex不匹配,循环将通过continue
跳到下一项。你知道吗这一次,你得到了
i = 1
和string = 'Gene.symbol
。同样,字符串与正则表达式不匹配,因此您可以跳到下一项。这个过程一直持续到您得到第7项:ADX_KD_06.ip
。这里有i = 6
和string = 'ADX_KD_06.ip'
,它们与regex匹配。你知道吗从中可以得到
rg1 = ADX
、rg2 = LG
、rg3 = 06
和rg4 = ip
。这样,键就变成了ADX06
,您就可以执行first_part_dict[key].append(i)
。你知道吗这将在字典
first_part_dict
中创建键ADX06
,并将6
附加到其值列表中。现在,dict有{'ADX06': [6]}
。然后循环继续下一项。你知道吗这一次,我们有
i = 7
和string = 'ADX_KD_24.ip'
。这与regex匹配,几行之后,您将执行first_part_dict[key].append(i)
。你知道吗这将在字典
first_part_dict
中创建键ADX24
,并将7
附加到其值列表中。现在,dict有{'ADX06': [6], 'ADX24': [7]}
。然后循环继续下一项。你知道吗这一次,我们有
i = 8
和string = 'ADX_LG_06.ip'
。这与regex匹配,几行之后,您将再次执行first_part_dict[key].append(i)
。你知道吗这将在字典中创建键
ADX06
。。。但是等等!该键已经存在,因此它会将8
附加到其现有的值列表中。现在,dict有{'ADX06': [6, 8], 'ADX24': [7]}
。你知道吗这会一直持续下去,直到列表中的所有项目都得到处理。你知道吗
我要专注于
似乎基于某些条件,第一部分或第二部分将被填充。 例如{'ADX06':[]},下一次迭代{'ADX06':[1,]}。一段时间后>;{ADX06':[1,4,]}
p.S>;我希望您使用[]为所有可能的密钥初始化first\u part\u dict[key],或者只需在运行时添加first\u part\u dict[key]=[]。你知道吗
相关问题 更多 >
编程相关推荐