Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 动态切片列表以排除中间元素_Python_Python 3.x - Fatal编程技术网

Python 动态切片列表以排除中间元素

Python 动态切片列表以排除中间元素,python,python-3.x,Python,Python 3.x,我有一个命令列表,cmds=[['ADD',1'],['LOAD',5'],['SQR'],['ADD',3']],我想有选择地执行,例如一个不包括cmd[1]的cmd,另一个不包括cmd[2] 有没有关于如何动态执行此操作的建议?由于列表长度并不总是已知的如果有排除步骤的标准,您可以使用列表理解来创建经过筛选的命令列表: cmds=[['ADD', '1'], ['LOAD', '5'], ['SQR'], ['ADD', '3']], list slicing can use If you

我有一个命令列表,cmds=[['ADD',1'],['LOAD',5'],['SQR'],['ADD',3']],我想有选择地执行,例如一个不包括cmd[1]的cmd,另一个不包括cmd[2]


有没有关于如何动态执行此操作的建议?由于列表长度并不总是已知的

如果有排除步骤的标准,您可以使用列表理解来创建经过筛选的命令列表:

cmds=[['ADD', '1'], ['LOAD', '5'], ['SQR'], ['ADD', '3']],

list slicing can use If you want to choose selectively ,

(a) cmd excluding cmd[1] 
print(cmds[:1] + cmds[2:)
(b) cmd excluding cmd[2]
print(cmds[:2] + cmds[3:])
new_cmds = [cmd in cmds if 'LOAD' not in cmd]
new_cmds = [cmd in cmds if len(cmd) < 2]

如果有排除步骤的标准,则可以使用列表理解创建经过筛选的命令列表:

new_cmds = [cmd in cmds if 'LOAD' not in cmd]
new_cmds = [cmd in cmds if len(cmd) < 2]

您可以创建一个小助手函数,返回除要排除的命令外的所有命令:

def exclude(commands, idx):
    return commands[:idx] + commands[idx+1:]
这将返回一个列表,删除指定索引处的命令

如果要排除索引1处的命令,请这样调用:

exclude(cmds, 1)

注意:这里的索引是基于0的。

您可以创建一个小助手函数,返回除要排除的命令之外的所有命令:

def exclude(commands, idx):
    return commands[:idx] + commands[idx+1:]
这将返回一个列表,删除指定索引处的命令

如果要排除索引1处的命令,请这样调用:

exclude(cmds, 1)

注意:这里的索引是基于0的。

不必像切片那样不必要地创建新的列表对象,我们可以迭代输入序列,只保留第一个和最后一个

注意:我把保护代码不受空序列和单个元素影响的练习留给您


def exclude_internals(seq):
    it = iter(seq)
    yield next(it)  # the first element 
    while True:
        try:
            el = next(it)
        except StopIteration:
            yield el  # the last element
            break

els = [1,2,3,4,5]
print(list(exclude_internals(els)))
产生

[1, 5]
当然,我们也可以直接处理第一个和最后一个元素

els = [1,2,3,4,5]
print([els[0], els[-1]])

不必像切片那样不必要地创建新的列表对象,我们可以迭代输入序列,只保留第一个和最后一个

注意:我把保护代码不受空序列和单个元素影响的练习留给您


def exclude_internals(seq):
    it = iter(seq)
    yield next(it)  # the first element 
    while True:
        try:
            el = next(it)
        except StopIteration:
            yield el  # the last element
            break

els = [1,2,3,4,5]
print(list(exclude_internals(els)))
产生

[1, 5]
当然,我们也可以直接处理第一个和最后一个元素

els = [1,2,3,4,5]
print([els[0], els[-1]])

一个新的cmds=cmds[:1]+cmds[2:]奥斯汀我可能在回答ba应该是新的cmds=cmds[:1]+cmds[2:]b应该是新的cmds=cmds[:2]+cmds[3:]一个新的cmds=cmds[:1]+cmds[2:]奥斯汀我可能在回答ba应该是新的cmds=cmds[:1]+cmds[2:]b应该是新的cmds=cmds[:2]+cmds[3:]有什么方法可以这样做吗?例如,如果我不知道列表中会有多少个命令,有什么方法可以动态地执行吗?例如,如果我不知道listNo中有多少个命令,只知道非结束元素。例如[1,2,3],我想排除cmd2或[1,2,3,4,5],我想排除,2,然后3,然后4No,只是非结束元素。例如[1,2,3],我想排除cmd2或[1,2,3,4,5],我想排除,2,然后3,然后4