根据值选择数组中的行

时间:2017-11-27 00:10:43

标签: python arrays

我有一个二维数组,其元素是从文本文件中读取的。对于任意数量的元素,在#处出现井号(twod_array[n][0])。对于第二维中不以井号开头的每个数组,我想执行一个计算。谁能帮我?我尝试使用numpy.split,但我认为我的语法错误。这是数组的粗略格式:

twod_array = [
    ['#', author], ['#', <more strings>], [23, 345000, 234, 345],
    [<more numbers>], [<more numbers>]
    ['#', <more strings>], [<more numbers>], [<more numbers>]
]

1 个答案:

答案 0 :(得分:0)

真的糟糕的解释。我知道你想要使用分隔符来切片列表(我们称之为python上的列表,而不是数组)以确定从哪里开始和结束该切片。如果起始分隔符以#开头,那么起始分隔符是该列表中的第一个项目,而结束分隔符是以相同的符号/标记/主题标签/其他内容开头的下一个项目。

1:首先,你需要修复你的列表,确保字符串是字符串,并且项目之间有逗号:

array = [
    ["author"],
    ["# something put here"],
    [23, 345000, 234, 345],
    ["more numers"],
    ["more numers"],
    ["# something put here"],
    ["more numers"],
    ["more numers"]
    ]

2:然后您要查找将用作分隔符的那些行的索引。
注意:为简单起见,下一段代码假设您始终只有2行以#开头。

start = end = None # Create empty variables
for index, item in enumerate(array): # Loop that iterates index and data
    if str(item[0]).startswith("#"): # If data on first item starts with #
        if start is None: # If start variable is unused yet
            start = index + 1 # This is the start index
        else: # If start variable is already used
            end = index # This is the end index

3:现在我们知道从哪里开始以及在哪里结束,我们可以使用索引startend来切割列表。我们为此创建了一个新列表:

my_sliced_array = array[start:end]

加分:随意使用下一个打印件进行测试并查看代码的结果:

print("printing from {} to {}".format(start, end))
print(my_sliced_array)