搜索并添加python列表

时间:2011-10-09 17:14:01

标签: python list

我有一个TList列表。如果之前没有新项目,我想在列表中添加新项目。例如,如果项目I不存在,则添加到Tlist,否则跳过。有更多pythonic方式吗?注意:首先TList可能为空,并且在此代码中添加了元素。例如,在添加Z之后,TList = [[A,B,C],[D,F,G],[H,I,J],[Z,aa,bb]]。其他要素基于对Z的计算。

    item = 'C'  # for example this item will given by user
    TList = [ [A,B,C],[D,F,G],[H,I,J]]
    if not TList:  
        ## do something
        # check if files not previously present in our TList and then add to our TList
    elif item  not in zip(*TList)[0]: 
         ## do something  

4 个答案:

答案 0 :(得分:2)

由于看起来每个子列表中的第一个条目是某种键,而其余条目以某种方式从该键派生,因此字典可能是更合适的数据结构:

vals = {'A': ['B','C'], 'D':['F','G'], 'H':['I','J']}
if 'Z' in vals:
  print 'found Z'
else:
  vals['Z'] = ['aa','bb']

答案 1 :(得分:1)

如果你需要保持相同的数据结构,这样的事情应该有效:

# create a set of already seen items
seen = set(zip(*TList)[:1])

# now start adding new items
if item not in seen:
    seen.add(item)
    # add new sublist to TList

答案 2 :(得分:1)

@aix提出了一个很好的建议,使用dict作为你的数据结构;它似乎很适合您的用例。

考虑结束价值检查(即'它存在吗?')和派生值的计算(例子中的'aa'和'bb')。

class TList(object):
    def __init__(self):
        self.data = {}

    def __iter__(self):
        return iter(self.data)

    def set(self, key):
        if key not in self:
            self.data[key] = self.do_something(key)

    def get(self, key):
        return self.data[key]

    def do_something(self, key):
        print('Calculating values')
        return ['aa', 'bb']

    def as_old_list(self):
        return [[k, v[0], v[1]] for k, v in self.data.iteritems()]

t = TList()

## Add some values. If new, `do_something()` will be called
t.set('aval')
t.set('bval')
t.set('aval') ## Note, do_something() is not called

## Get a value
t.get('aval')

## 'in ' tests work
'aval' in t

## Give you back your old data structure
t.as_old_list()

答案 3 :(得分:1)

这是一个使用sets和set.union的方法:

a = set(1,2,3)
b = set(4,5,6)
c = set()
master = [a,b,c]
if 2 in set.union(*master):
  #Found it, do something
else:
  #Not in set, do something else

如果测试成员资格的原因只是为了避免两次添加条目,则set结构使用a.add(12)向集合添加内容,但只添加一次,从而无需测试。因此如下:

>>> a=set()
>>> a.add(1)
>>> a
set([1])
>>> a.add(1)
>>> a
set([1])

如果您需要将其他地方设置为列表,您只需说" list(a)"获得" a"作为列表,或"元组(a)"把它作为一个元组。