该程序的想法是计算一些结构的生命时间(计数一个接一个的相同结构),但我有实现计数器或枚举函数的问题,我不想计算所有的数量。我尝试过很多方法。现在我被卡住了。
struct=[1, 2, 2, 2, 3, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1,] #input list of structures
list1=[] #list of lifetimes for struct 1
for i in range (0, len(struct)-1):
a=struct[i-1]
b=struct[i]
c=struct[i+1]
if a!=1 and b==1 and c!=1: # if it is one separated record
list1.append(1)
if a!=1 and b==1 and c==1: # for first record in sequence
list1.append('f')
if a==1 and b==1 and c==1: # for middle record in sequence
list1.append('m')
if a==1 and b==1 and c!=1: # for last record in sequence
list1.append('l')
print (list1)
它给了我:[1,1,'f','m','m','l','f','l']
你能给我任何建议如何实施反击?
例如['f','m','m','l](第一/中/中/后)是从结构列表中的[1,1,1,1]给出的,因此它是4条记录
获得[1,1,4,2]
抱歉,对于我的非编程语言,我是这个领域的初学者。 我搜索过任何类似的问题,但找不到。
答案 0 :(得分:2)
是这样的,你在找?
inlist = [1, 2, 2, 2, 3, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1,]
# 1 1 1--2--3--4 1--2
def lifetime(num):
output = []
count = 0
for x in inlist:
if x == num:
count += 1
else:
if count != 0:
output.append(count)
count = 0
if count != 0:
output.append(count)
print output
lifetime(1)
lifetime(2)
lifetime(3)
输出:
[1, 1, 4, 2]
[3, 1, 1]
[2, 1]
答案 1 :(得分:0)
您可以使用itertools.groupby()
按值对列表进行分组,然后返回具有给定值的每个组的计数:
from itertools import groupby
def ilen(iterable):
""" Return the length of an iterable """
return sum(1 for _ in iterable)
def lifetime(num, lst):
""" Return a list of counts for each group of num in lst """
return [ilen(g) for k, g in groupby(lst) if k==1]
示例:
>>> inlist = [1, 2, 2, 2, 3, 3, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1,]
>>> lifetime(1, inlist)
[1, 1, 4, 2]