2012-12-17 128 views
2

删除重复的名单这是我到目前为止有:需要与功能

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) ] 
+5

不要叫你的名单'list' 。如果你给你的列表调用了一些不同的东西,例如'list(set(list))'可能会起作用。 '名单(套(my_items))'。通过将你自己的对象分配给变量'list',你已经重写了'list()'函数。 – Marius

+0

谢谢你修复它,我知道比这样做更好... – user1819717

+0

只是告诉你,做'set()'不保留元素的顺序,所以如果你想保持顺序使用我发布的函数。 – jackcogdill

回答

1

您正在使用标准库函数作为变量名称。这就是set()操作失败的原因。

更改列表= []到my_list = []还是其他什么东西......

+0

'list'不是一个关键字 - 否则当你尝试赋值给它时你会得到一个SyntaxError。尽管将它用作变量名是一个非常糟糕的主意。 –

+0

那是正确的,我将改为标准库函数名称。 ^^ –

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

0

set(list)

'H2O2Y2', 'R3O2' 比较列表的成员,在你的情况下, 'Y 2 S 3'

其中没有一个是相同的。

第一“”。加入()的列表中的项目为一个字符串-a角色一览表我相信 - 然后用set()来找到独特的字符:

def unique_elements(group): 

    return list(set(''.join(group)))