查找所有连续的子数组
Finding all contiguous subarrays
这里我有一个 elementList,它只包含 0 和 1 的数据。我将数据从 elementList 扔到 temporaryList 以检查所有子数组。
我正在尝试查找仅包含一个 '1' 的连续子数组的总数。
我通过打印子数组检查了它们是否正确。它们很好,但我的 subarrayCounter 没有给出正确的值,我看不到我的问题(我确定有一个愚蠢的错误,抱歉)。
任何想法都可以。谢谢
for i in range (0,len(elementlist)):
maxwidth = len(elementlist) - i
for j in range (0 , maxwidth):
tempList.append(elementlist[i+j])
for m in range (0 , len(tempList)) :
if tempList[m] == '1' :
counter += 1
if counter == int(numberOne) :
subarrayCounter += 1
counter = 0
tempList.clear()
例如,当我的列表中有 0 1 1 0 1 时,如果我尝试打印连续的子数组,它会给出正确的答案:
for i in range (0,len(elementlist)):
maxwidth = len(elementlist) - i
for j in range (0 , maxwidth):
tempList.append(elementlist[i+j])
print(tempList) # added print here
for m in range (0 , len(tempList)) :
if tempList[m] == '1' :
counter += 1
if counter == int(numberOne) :
subarrayCounter += 1
counter = 0
tempList.clear()
输出:
['0']
['0', '1']
['0', '1', '1']
['0', '1', '1', '0']
['0', '1', '1', '0', '1']
['1']
['1', '1']
['1', '1', '0']
['1', '1', '0', '1']
['1']
['1', '0']
['1', '0', '1']
['0']
['0', '1']
['1']
我认为下面的代码是解决这个问题的简单方法。
def countSubArraysWithSingle1(elementlist):
subarrayCounter = 0
for i in range (0,len(elementlist)):
for j in range (i , len(elementlist)):
if elementlist[i:j+1].count('1') == 1:
print(elementlist[i:j+1])
subarrayCounter += 1
print("Total count: ",subarrayCounter)
I/P: ['0', '1', '1', '0', '1']
O/P:
['0', '1']
['1']
['1']
['1', '0']
['0', '1']
['1']
Total count: 6
解释:
该代码按以下顺序找出所有 sub-arrays 并在每个 sub-array 上运行一个计数函数,计算其中“1”的数量和 returns 计数。我们检查返回的计数是否为 1,如果是,则我们将 subarrayCounter 增加 1:
['0'].count('0') => 0
**['0', '1'].count('1') => 1 {increment subarrayCounter by 1}**
['0', '1', '1'].count('1') => 2
['0', '1', '1', '0'].count('1') => 2
['0', '1', '1', '0', '1'].count('1') = 3
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
['1', '1'].count('1') => 2
['1', '1', '0'].count('1') => 2
['1', '1', '0', '1'].count('1') => 3
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
**['1', '0'].count('1') => 1 {increment subarrayCounter by 1}**
['1', '0', '1'].count('1') => 2
['0'].count('1') => 0
**['0', '1'].count('1') => 1 {increment subarrayCounter by 1}**
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
希望对您有所帮助!
这里我有一个 elementList,它只包含 0 和 1 的数据。我将数据从 elementList 扔到 temporaryList 以检查所有子数组。 我正在尝试查找仅包含一个 '1' 的连续子数组的总数。
我通过打印子数组检查了它们是否正确。它们很好,但我的 subarrayCounter 没有给出正确的值,我看不到我的问题(我确定有一个愚蠢的错误,抱歉)。
任何想法都可以。谢谢
for i in range (0,len(elementlist)):
maxwidth = len(elementlist) - i
for j in range (0 , maxwidth):
tempList.append(elementlist[i+j])
for m in range (0 , len(tempList)) :
if tempList[m] == '1' :
counter += 1
if counter == int(numberOne) :
subarrayCounter += 1
counter = 0
tempList.clear()
例如,当我的列表中有 0 1 1 0 1 时,如果我尝试打印连续的子数组,它会给出正确的答案:
for i in range (0,len(elementlist)):
maxwidth = len(elementlist) - i
for j in range (0 , maxwidth):
tempList.append(elementlist[i+j])
print(tempList) # added print here
for m in range (0 , len(tempList)) :
if tempList[m] == '1' :
counter += 1
if counter == int(numberOne) :
subarrayCounter += 1
counter = 0
tempList.clear()
输出:
['0']
['0', '1']
['0', '1', '1']
['0', '1', '1', '0']
['0', '1', '1', '0', '1']
['1']
['1', '1']
['1', '1', '0']
['1', '1', '0', '1']
['1']
['1', '0']
['1', '0', '1']
['0']
['0', '1']
['1']
我认为下面的代码是解决这个问题的简单方法。
def countSubArraysWithSingle1(elementlist):
subarrayCounter = 0
for i in range (0,len(elementlist)):
for j in range (i , len(elementlist)):
if elementlist[i:j+1].count('1') == 1:
print(elementlist[i:j+1])
subarrayCounter += 1
print("Total count: ",subarrayCounter)
I/P: ['0', '1', '1', '0', '1']
O/P:
['0', '1']
['1']
['1']
['1', '0']
['0', '1']
['1']
Total count: 6
解释:
该代码按以下顺序找出所有 sub-arrays 并在每个 sub-array 上运行一个计数函数,计算其中“1”的数量和 returns 计数。我们检查返回的计数是否为 1,如果是,则我们将 subarrayCounter 增加 1:
['0'].count('0') => 0
**['0', '1'].count('1') => 1 {increment subarrayCounter by 1}**
['0', '1', '1'].count('1') => 2
['0', '1', '1', '0'].count('1') => 2
['0', '1', '1', '0', '1'].count('1') = 3
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
['1', '1'].count('1') => 2
['1', '1', '0'].count('1') => 2
['1', '1', '0', '1'].count('1') => 3
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
**['1', '0'].count('1') => 1 {increment subarrayCounter by 1}**
['1', '0', '1'].count('1') => 2
['0'].count('1') => 0
**['0', '1'].count('1') => 1 {increment subarrayCounter by 1}**
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
希望对您有所帮助!