从第一项的另一个列表中的列表中计算单词

Hy, 我想从位置零上的另一个列表中的列表中计算给定的短语。从第一项的另一个列表中的列表中计算单词

list_given_atoms= ['C', 'Cl', 'Br'] 

list_of_molecules= ['C(B2Br)[Cl{H]Cl}P' ,'NAME']

当蟒蛇找到匹配它应该在字典中萨法德像

countdict = [ 'Cl : 2', 'C : 1', 'Br : 1'] 

我试图

re.findall(r'\w+', list_of_molecules[0]) 

已经但是,在像 “B2Br”,也就是说resulsts这是definitly不是我想要的。

有人可以帮我吗?

回答:

[a-zA-Z]+应该用来代替\w+因为\w+将匹配字母和数字,而你只是在寻找字母:

import re 

list_given_atoms= ['C', 'Cl', 'Br']

list_of_molecules= ['C(B2Br)[Cl{H]Cl}P' ,'NAME']

molecules = re.findall('[a-zA-Z]+', list_of_molecules[0])

final_data = {i:molecules.count(i) for i in list_given_atoms}

输出:

{'C': 1, 'Br': 1, 'Cl': 2} 

回答:

你可以使用这样的事情:

>>> Counter(re.findall('|'.join(sorted(list_given_atoms, key=len, reverse=True)), list_of_molecules[0])) 

Counter({'Cl': 2, 'C': 1, 'Br': 1})

您必须按照它们的长度对元素进行排序,因此'Cl'匹配'C'之前的元素。

回答:

re.findall()解决方案:

import re 

list_given_atoms = ['C', 'Cl', 'Br']

list_of_molecules = ['C(B2Br)[Cl{H]Cl}P' ,'NAME']

d = { a: len(re.findall(r'' + a + '(?=[^a-z]|$)', list_of_molecules[0], re.I))

for a in list_given_atoms }

print(d)

输出:

{'C': 1, 'Cl': 2, 'Br': 1} 

回答:

我想你的解决方案,我想通了,也有后对方几个C。所以,我来到这一个位置:

for element in re.findall(r'([A-Z])([a-z|A-Z])?'. list_of_molecules[0]): 

if element[1].islower:

counter = element[0] + element[1]

if not (counter in counter_dict):

counter_dict[counter] = 1

else:

counter_dict[counter] += 1

我检查元素只有一个案件,并将它们添加到字典的方式相同。可能有更好的方法。

回答:

您不能使用/w作为一个单词字符等同于:

[a-zA-Z0-9_] 

其中明确包括号码,因此"B2Br"匹配。

你也不能只使用正则表达式:

[a-zA-Z]+ 

因为这会产生这样的事情"CO2"应该产生2分离分子的一个原子:C0


不过,我想出了(regex101)正则表达式只检查一个大写字母,然后01(因此可选)小写字母之间。

这:

[A-Z][a-z]{0,1} 

和它将正确产生的原子。


于是将这一到您的原lists的:

list_given_atoms= ['C', 'Cl', 'Br'] 

list_of_molecules= ['C(B2Br)[Cl{H]Cl}P' ,'NAME']

我们想先找到在list_of_molecules所有的原子,然后创建原子计数的字典中list_given_atoms

因此,要找到所有的原子,我们可以在分子列表中的第一个元素上使用re.findall

atoms = re.findall("[A-Z][a-z]{0,1}", list_of_molecules[0]) 

这给list

['C', 'B', 'Br', 'Cl', 'H', 'Cl', 'P'] 

然后,拿到计数字典,我们可以用dictionary-comprehension

counts = {a: atoms.count(a) for a in list_given_atoms} 

,其表明了期望的结果:

{'Cl': 2, 'C': 1, 'Br': 1} 


而且也将工作时,我们有分子如CO2

以上是 从第一项的另一个列表中的列表中计算单词 的全部内容, 来源链接: utcz.com/qa/258779.html

回到顶部