在列表Python中保持类似项的第一个数字的轨道

时间:2014-03-24 06:49:57

标签: python-3.x

例如, lst = [' 120 abc',' 123 abc',' 256 abc'' 125 bcd'' 326 bcd&# 39;,' 426 bcd']

我想计算每个项目中第二个数字的时间2。

在上面的第一部分:

对于以abc结尾的项目,

2发生2次 对于以bcd结尾的itmes,有2次出现3次

我的问题与本福德法律的任务有关。给出的文本文件的结构类似于上面的lst。数字代表选票数,字母代表城市名称。

我的程序读取文件并将每个选票计数和相应的城市作为列表中的项目。

由于列表中的每个项目都是一个字符串,我知道要为每个项目索引所需的数字,并计算出现次数。但我不知道如何将每个项目分成相似的项目组。

我是编程的绝对初学者。我不是在寻找实际的代码,而是在寻找如何解决问题的想法。

2 个答案:

答案 0 :(得分:2)

索引可帮助您快速检索序列的元素。第一项始终为零指数。 list和string都是序列,所以:

>>> lst[2]
'256 abc'
>>> lst[2][1]
'5'

有了索引的知识,您可以轻松地使用生成器表达式在列表中获取列表的所有第二个字符:

>>> [x[1] for x in lst]
['2', '2', '5', '2', '2', '2']

现在你只需计算那里的两个人:

>>> [x[1] for x in lst].count('2')
5

如果您只想要以特定字符串结尾的那些,请使用此genexp:

>>> [x[1] for x in lst if x.endswith('abc')]
['2', '2', '5']

答案 1 :(得分:0)

你想要做的就是只是对列表进行迭代,当你找到一个匹配更多的索引时,只需将它添加到列表中即可。这段代码可以让您了解它是如何完成的。

lst = ['120 abc','123 abc','256 abc','125 bcd','326 bcd','426 bcd']
list2 = {}
for listItem in lst:
    if listItem.index('2') == 1:
        t = listItem.split()        
        if t[1] in list2:
            list2[t[1]] = list2[t[1]] + 1
        else:
            list2[t[1]] = 1

print(list2)

listItem.split()是一个标准函数,它在空格上划分字符串,之后我们可以使用" abc"作为键,将值放在字典中,并总结任何特定字符串出现的次数。