如何计算列表中元素之前的特定元素?
How to count specific elements before an element in a list?
我们有一个列表
list = [1, 1, 1, 0, 1, 0, 0, 1]
我正在尝试找到一个函数来计算每个项目之前的 0 的数量,然后将这个数字乘以 3。
def formula(n):
for x in list:
if x == 1:
form = n * 3
return form
#If x is 1, count the number of zeros right before x and multiply this by 3,
例如对于上面的列表,第一个元素是 1 并且它前面没有数字,程序应该计算 0 * 3 = 0,对于第二个也是 1 的元素,数字就在它也不是零之前,程序也应该计算 0 * 3 = 0。第 4 个元素是 0,所以程序应该忽略,对于第 5 个元素,它是 1,它之前的数字是 0,程序计算 1 * 3 = 3,对于第 6 个元素,它前面的数字是 1,系统应该计算 0 * 3 = 0。第 7 个元素是 0,因为 x 不等于 1,程序不应该做任何事情。对于最后一个元素是 1,它前面的最后两个数字是零,程序应该计算 2 * 3 = 6
试试这个,
def formula(l):
count_zero = 0
result = []
for i in l:
if i == 1:
result.append(3*count_zero)
count_zero = 0
elif i == 0:
count_zero += 1
return result
# Test case
l = [1, 1, 1, 0, 1, 0, 0, 1]
result = formula(l)
print(result)
# [0, 0, 0, 3, 6]
我相信您正在寻找一个带有简单计数器的生成器:
def get_values (list):
n = 0
for x in list:
if x == 1:
yield n * 3
n = 0 # reset the counter
elif x == 0:
n += 1 # increment the counter
print(list(get_values([1, 1, 1, 0, 1, 0, 0, 1])))
# [0, 0, 0, 3, 6]
这是我的解决方案。
test_list = [1, 1, 1, 0, 1, 0, 0, 1]
def formula(list):
track = []
start = 0
for i,n in enumerate(list):
count_list_chunk = list[start:i]
if count_list_chunk.count(0) > 0 and n != 0:
start = i
if n != 0:
track.append( count_list_chunk.count(0)*3 )
return track
print formula(test_list)
#[ 0, 0, 0, 3, 6]
我们有一个列表
list = [1, 1, 1, 0, 1, 0, 0, 1]
我正在尝试找到一个函数来计算每个项目之前的 0 的数量,然后将这个数字乘以 3。
def formula(n):
for x in list:
if x == 1:
form = n * 3
return form
#If x is 1, count the number of zeros right before x and multiply this by 3,
例如对于上面的列表,第一个元素是 1 并且它前面没有数字,程序应该计算 0 * 3 = 0,对于第二个也是 1 的元素,数字就在它也不是零之前,程序也应该计算 0 * 3 = 0。第 4 个元素是 0,所以程序应该忽略,对于第 5 个元素,它是 1,它之前的数字是 0,程序计算 1 * 3 = 3,对于第 6 个元素,它前面的数字是 1,系统应该计算 0 * 3 = 0。第 7 个元素是 0,因为 x 不等于 1,程序不应该做任何事情。对于最后一个元素是 1,它前面的最后两个数字是零,程序应该计算 2 * 3 = 6
试试这个,
def formula(l):
count_zero = 0
result = []
for i in l:
if i == 1:
result.append(3*count_zero)
count_zero = 0
elif i == 0:
count_zero += 1
return result
# Test case
l = [1, 1, 1, 0, 1, 0, 0, 1]
result = formula(l)
print(result)
# [0, 0, 0, 3, 6]
我相信您正在寻找一个带有简单计数器的生成器:
def get_values (list):
n = 0
for x in list:
if x == 1:
yield n * 3
n = 0 # reset the counter
elif x == 0:
n += 1 # increment the counter
print(list(get_values([1, 1, 1, 0, 1, 0, 0, 1])))
# [0, 0, 0, 3, 6]
这是我的解决方案。
test_list = [1, 1, 1, 0, 1, 0, 0, 1]
def formula(list):
track = []
start = 0
for i,n in enumerate(list):
count_list_chunk = list[start:i]
if count_list_chunk.count(0) > 0 and n != 0:
start = i
if n != 0:
track.append( count_list_chunk.count(0)*3 )
return track
print formula(test_list)
#[ 0, 0, 0, 3, 6]