Python 动态切片列表以排除中间元素
我有一个命令列表,cmds=[['ADD',1'],['LOAD',5'],['SQR'],['ADD',3']],我想有选择地执行,例如一个不包括cmd[1]的cmd,另一个不包括cmd[2]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']],
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