如何在给定字符串的每一次出现时分割一个Python数组?

问题描述 投票:0回答:1

我在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']]

谁能帮帮我?

python slice
1个回答
1
投票

你可以尝试在列表中迭代,检查元素是否是浮点数,如果是就把它添加到一个列表中,如果不是就创建一个新的列表。只要把你做过的所有列表加起来就可以了。

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

0
投票

在数组上循环,如果元素是 "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

0
投票

由于唯一的拆分指标是 "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)
© www.soinside.com 2019 - 2024. All rights reserved.