我在Python 3.7中编写了一段代码,其中我需要将一个数组分割成块。
这个数组类似于下面的数组。
['1.60500002', '1.61500001', '1.625', '1.63499999','NO',
'1.73500001','1.745', 'NO','2.04500008', '2.05499983']
我有兴趣在每次出现字符串时创建n个不同的分片 (本例中是3个)。'NO'
发生。那么输出数组应该是这样的。
[['1.60500002', '1.61500001', '1.625', '1.63499999'],
['1.73500001', '1.745'],
['2.04500008', '2.05499983']]
谁能帮帮我?
你可以尝试在列表中迭代,检查元素是否是浮点数,如果是就把它添加到一个列表中,如果不是就创建一个新的列表。只要把你做过的所有列表加起来就可以了。
def split_str(inp):
array_of_array = []
arr = []
for a in inp:
try:
float(a)
arr.append(a)
except Exception:
array_of_array.append(arr)
arr = []
array_of_array.append(arr)
return array_of_array
在数组上循环,如果元素是 "NO",我们就把数组拆分,直到 "NO "元素,然后把它添加到输出中,如果到了最后,最后的部分就是从最后一个 "NO "到最后。
my_array = ['1.60500002', '1.61500001', '1.625', '1.63499999','NO','1.73500001', '1.745', 'NO','2.04500008', '2.05499983']
output = []
counter = 0
start = 0
for item in my_array:
if item == "NO":
output.append(my_array[start:counter])
start = counter + 1
if counter == len(my_array) - 1:
output.append(my_array[start:counter + 1])
counter += 1
由于唯一的拆分指标是 "NO",这应该比较容易。你要做的就是检查 "NO",然后创建一个新的列表。您还必须处理第一个元素的情况,因为它可以是 "NO "或数字,但如果它是 "NO",则不需要创建一个新的列表。
要在一个列表中创建一个新的列表,你可以这样做 examplelist.append([])
然后在列表中访问一个特定的列表,你可以在使用append()之前在方括号中注明列表编号。examplelist[list_number].append(whatever)
这是我想出的代码。
#Input
array = ['1.60500002', '1.61500001', '1.625', '1.63499999','NO','1.73500001', '1.745', 'NO','2.04500008', '2.05499983']
#Declaring
result = [] #empty list
list_number = 0 #to access a specific list inside a list
starting_element = True #var to handle starting scenario
for element in array:
#starting scenario
if starting_element:
result.append([])
if element != 'NO':
result[list_number].append(element)
starting_element = False
#NO scenario
elif element == 'NO':
list_number += 1
result.append([])
#Number scenario
elif element != 'NO':
result[list_number].append(element)
print(result)