这是我到目前为止所做的:
def unique_element(group):
list=[]
for element in group:
piece=parse_formula(element)
for x in piece:
list.append(x[0])
return list #list(set(list))
我有下面的其他功能,但这是我试图解决的问题。现在它返回一个带有字母列表的函数,但我不想重复字母。例如:
unique_element(['H2O2Y2','R3O2','Y2S3'])
['H', 'O', 'Y', 'R', 'O', 'Y', 'S']
我认为使用list(set(list))
会起作用,但是当我运行该函数时,我得到:
unique_element(['H2O2Y2','R3O2','Y2S3'])
追踪(最近一次呼叫最后一次):
File "<stdin>", line 1, in <module>
File "_sage_input_61.py", line 10, in <module>
exec compile(u'print _support_.syseval(python, u"unique_element([\'H2O2Y2\',\'R3O2\',\'Y2S3\'])", __SAGE_TMP_DIR__)
File "", line 1, in <module>
File "/sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py", line 479, in syseval
return system.eval(cmd, sage_globals, locals = sage_globals)
File "/sagenb/sage_install/sage-5.4-sage.math.washington.edu-x86_64-Linux/local/lib/python2.7/site-packages/sage/misc/python.py", line 56, in eval
eval(z, globals)
File "", line 1, in <module>
File "", line 10, in unique_element
TypeError: 'list' object is not callable
其他功能:
from numpy import *
from scipy import *
from pylab import *
import re
def parse_formula(formula):
'''Given a simple chemical formula, return a list of (element, multiplicity) tuples.
Example:
'H2SO4' --> [('H', 2.0), ('S', 1.0), ('O', 4.0)]
'''
return [ (elem, float(mul) if mul else 1.) for (elem, mul) in re.findall(r'([A-Z][a-z]*)(\d*)', formula) ]
答案 0 :(得分:1)
您正在使用标准库函数作为变量名称。这就是set()操作失败的原因。
将list = []更改为my_list = []或其他内容......
答案 1 :(得分:0)
这个函数摆脱了列表中的重复:
def f5(seq, idfun=None):
if idfun is None:
def idfun(x): return x
seen = {}
result = []
for item in seq:
marker = idfun(item)
if marker in seen: continue
seen[marker] = 1
result.append(item)
return result
这有用吗?
来自此site。
答案 2 :(得分:0)
set(list)
会比较列表中的成员
'H2O2Y2', 'R3O2', 'Y 2 S 3'
没有一个是相同的。
首先''。join()将列表项分成一个字符串 - 我相信一个字符列表 - 然后使用set()查找唯一字符:
def unique_elements(group):
return list(set(''.join(group)))