如何计算字符串列表中的元素

时间:2013-08-10 01:02:56

标签: python

如果有一个这样的列表:

[['welcome','a1'],['welcome','a1'],['hello','a2'],['hello','a3']]

我希望返回这样的内容:

[['welcome','a1', 2],['hello','a2', 1],['hello','a3', 1]]

如果遇到子列表中的同一对字符串,请递增计数

到目前为止我所拥有的:

counter = 0
for i in mylist:
  counter += 1 
  if i[0]== i[0]:
    if i[1] == i[1]:
        counter -= 1
 ouptut.append([mylist, counter])

我是新来的,感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在此处使用set仅获取唯一商品:

>>> lis = [['welcome','a1'],['welcome','a1'],['hello','a2'],['hello','a3']] 
>>> [list(x) + [1] for x in set(map(tuple, lis))]
>>> [['welcome', 'a1', 1], ['hello', 'a3', 1], ['hello', 'a2', 1]]

说明:

Set始终从可迭代或迭代器返回唯一项,但由于集只能包含不可变项,因此您应首先将它们转换为元组。上述代码的详细版本,唯一不同的是,它还将保留原始代码或

>>> lis = [['welcome','a1'],['welcome','a1'],['hello','a2'],['hello','a3']] 
>>> s = set()
>>> for item in lis:
...     tup = tuple(item)  #covert to tuple
...     s.add(tup)
>>> s
set([('welcome', 'a1'), ('hello', 'a3'), ('hello', 'a2')])

现在使用列表推导来获得预期的输出:

>>> [list(item) + [1] for item in s]
[['welcome', 'a1', 1], ['hello', 'a3', 1], ['hello', 'a2', 1]]

如果项目的顺序很重要(sets不保留订单),请使用此:

>>> seen = set()
>>> ans = []
>>> for item in lis:
...     tup = tuple(item)
...     if tup not in seen:
...         ans.append(item + [1])
...         seen.add(tup)
...         
>>> ans
[['welcome', 'a1', 1], ['hello', 'a2', 1], ['hello', 'a3', 1]]

我不确定在这里使用1是什么意思。