从第一项的另一个列表中的列表中计算单词
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
分离分子的一个原子:C
和0
。
不过,我想出了(regex101
)正则表达式只检查一个大写字母,然后0
和1
(因此可选)小写字母之间。
这:
[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