如何从数组中删除某些元素?

时间:2019-08-15 11:45:24

标签: python-3.x list indexing del

我有一个二维数组,如何从中删除某些元素?

x = [[2,3,4,5,2],[5,3,6,7,9,2],[34,5,7],[2,46,7,4,36]]
for i in range(len(x)):
    for j in range(len(x[i])):
        if x[i][j] == 2:
            del x[i][j]

这将破坏数组并返回错误“列表索引超出范围”。

2 个答案:

答案 0 :(得分:2)

在迭代列表的同时对其进行更改始终是一个坏主意。只需创建一个新列表并添加除您要排除的那些项目以外的所有内容即可。如:

IEnumerator TEBSWait()
    {
        //INK PLUGIN VARIABLE THAT DETERMINES THE SECONDS TO WAIT
        int tebs = (int)_inkStory.variablesState["TEBS"];

        //SAVE GAME
        Debug.Log("tebsSaved");
        var savedState = _inkStory.state.ToJson();
        PlayerPrefs.SetString("tebsSaved", savedState);

        //STOP TIME & WAIT FOR A WHILE 
        Time.timeScale = 0;
        yield return new WaitForSecondsRealtime(tebs * 60); 
        Time.timeScale = 1;

        PlayerPrefs.DeleteKey("tebsSaved");
    }

编辑:通过省略列表索引使其变得更加Python化。

与Sai prateek提供的解决方案相比,我认为这更具可读性,但以暂时增加内存使用量(创建新列表)为代价。

答案 1 :(得分:2)

您可以在列表项上使用 @Override public CompletableFuture<Acknowledge> submitJob(JobGraph jobGraph, Time timeout) { log.info("Received JobGraph submission {} ({}).", jobGraph.getJobID(), jobGraph.getName()); MDC.put("jobName",jobGraph.getName()+"-"+jobGraph.getJobID().toString()); try { if (isDuplicateJob(jobGraph.getJobID())) { return FutureUtils.completedExceptionally( new JobSubmissionException(jobGraph.getJobID(), "Job has already been submitted.")); } else { return internalSubmitJob(jobGraph); } } catch (FlinkException e) { return FutureUtils.completedExceptionally(e); } } 。例如-

pop

我认为这可以解决您的问题。

>>> array = [[1,2,3,4], [6,7,8,9]]
>>> array [1].pop(3)
>>> array 
[[1, 2, 3, 4], [6, 7, 8]]

我已经在本地对其进行了测试,并且可以按预期工作。希望它会有所帮助。