主頁 >  其他 > 將零從給定串列移動到最后一個的函式

將零從給定串列移動到最后一個的函式

2022-09-14 01:32:52 其他

def move_zero(lst):
    """
    Given a list of integers, moves all non-zero numbers to the beginning of the list and
    moves all zeros to the end of the list.  This function returns nothing and changes the given list itself.

    For example:
    - After calling move_zero([0,1,0,2,0,3,0,4]), the given list should be [1,2,3,4,0,0,0,0] and the function returns nothing
    - After calling move_zero([0,1,2,0,1]), the given list should be [1,2,1,0,0] and the function returns nothing
    - After calling move_zero([1,2,3,4,5,6,7,8]), the given list should be [1,2,3,4,5,6,7,8] and the function returns nothing
    - After calling move_zero([]), the given list should be [] and the function returns nothing
    """
    c = 0
    for i in range (0,len(lst),1):
        if (lst[i] == 0):
            lst.pop(i)
            c  = 1
    for i in range(0,c):
        lst.append(0)

uj5u.com熱心網友回復:

這將使您更容易理解和其他人閱讀:

基本上收集所有的數字和零,然后添加串列。

def move_zero(lst):
    zeros = []
    nums = []
    for num in lst:
        if num == 0:
            zeros.append(num)
        else:
            nums.append(num)

    return nums   zeros

print(move_zero([1, 2, 4, 0, 4, 0, 4, 6, 0, 1]))

輸出:

[1, 2, 4, 4, 4, 6, 1, 0, 0, 0]

uj5u.com熱心網友回復:

問題是什么?

您正在從串列中洗掉元素,使用list.popwhile 迭代,但您沒有考慮到串列中的元素(具有更大的索引)已更改索引的事實。

你怎么能接近解決方案?

為了與您的代碼保持一致,有必要在使用該list.pop方法之前減去洗掉的元素總數。

注意:在功能上,我放了一個print列印元素的功能;這僅用于除錯目的,應在最終代碼中洗掉

代碼

這是代碼;如評論中所述,該函式正在回傳,并且正在就地None修改串列

另外,我在最后轉換了 for 回圈,從

for i in range(0,c):
    lst.append(0)

對此代碼,使用生成器運算式,結合list.extend方法:

lst.extend(0 for _ in range(c))

這是我想出的代碼實作:

def move_zero(lst):
    """
    Given a list of integers, moves all non-zero numbers to the beginning of the list and
    moves all zeros to the end of the list.  This function returns nothing and changes the given list itself.

    For example:
    - After calling move_zero([0,1,0,2,0,3,0,4]), the given list should be [1,2,3,4,0,0,0,0] and the function returns nothing
    - After calling move_zero([0,1,2,0,1]), the given list should be [1,2,1,0,0] and the function returns nothing
    - After calling move_zero([1,2,3,4,5,6,7,8]), the given list should be [1,2,3,4,5,6,7,8] and the function returns nothing
    - After calling move_zero([]), the given list should be [] and the function returns nothing
    """
    c = 0
    for i in range (0,len(lst),1):
        if not lst[i-c]:
            lst.pop(i-c)
            c  = 1
    lst.extend(0 for _ in range(c))
    print(lst)

move_zero([1,2,0,3,0])

我還建議遍歷串列的副本:

def move_zero(lst):
    """
    Given a list of integers, moves all non-zero numbers to the beginning of the list and
    moves all zeros to the end of the list.  This function returns nothing and changes the given list itself.

    For example:
    - After calling move_zero([0,1,0,2,0,3,0,4]), the given list should be [1,2,3,4,0,0,0,0] and the function returns nothing
    - After calling move_zero([0,1,2,0,1]), the given list should be [1,2,1,0,0] and the function returns nothing
    - After calling move_zero([1,2,3,4,5,6,7,8]), the given list should be [1,2,3,4,5,6,7,8] and the function returns nothing
    - After calling move_zero([]), the given list should be [] and the function returns nothing
    """
    c = 0
    for i,x in enumerate(lst.copy()):
        if not x:
            lst.pop(i-c)
            c  = 1
    lst.extend(0 for _ in range(c))
    print(lst)

move_zero([1,2,0,3,0])

輸出:

[1,2,3,0,0]

uj5u.com熱心網友回復:

def move_zero(lst):
    zeros = []  # a list to store all the zeros
    for num in lst:
        if num == 0:
            zeros.append(0)
            lst.remove(0)  # remove this zero from the list for now
    lst = lst   zeros  # append the zeros to the end of the list
    return lst
print(move_zero([1, 2, 4, 0, 4, 0, 4, 6, 0, 1]))

輸出:[1, 2, 4, 4, 4, 6, 1, 0, 0, 0]

不是最有效的方法,但它會完成這項作業。希望這可以幫助。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/506826.html

標籤:Python 列表 功能 循环 条件语句

上一篇:getrandmax()是固定數字嗎?

下一篇:返回列表

標籤雲
其他(144587) Python(37047) JavaScript(24595) Java(16369) C(14877) 區塊鏈(8236) C#(7885) AI(7469) 爪哇(7332) html(6691) MySQL(6680) 基礎類(6313) 熊猫(6030) sql(6027) PHP(5733) 数组(5697) R(5287) Linux(5154) 腳本語言(PerlPython)(5129) 反应(5104) 非技術區(4971) Android(4405) 数据框(4293) css(4194) 节点.js(3979) C語言(3288) json(3216) C++語言(3117) 列表(3106) 扑(3057) 安卓(2959) 打字稿(2907) VBA(2761) Java相關(2746) 疑難問題(2699) 细绳(2505) 單片機工控(2479) iOS(2357) ASP.NET(2340) MongoDB(2309) 麻木的(2249) 字典(2208) 正则表达式(2203) 循环(2187) 镖(2142) 擅长(2133) 迅速(2124) Web開發(1951) 功能(1930) 弹簧靴(1890) python-3.x(1875) xml(1860) for循环(1838) 谷歌表格(1831) Unity3D(1821) PostgreSQL(1796) 網絡通信(1793) .NETCore(1785) .NET技术(1780) 蟒蛇-3.x(1774)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 將零從給定串列移動到最后一個的函式

    def move_zero(lst): """ Given a list of integers, moves all non-zero numbers to the beginning of the list and moves all zeros to the en...

    uj5u.com 2022-09-14 01:32:52 more
  • getrandmax()是固定數字嗎?

    在 getrandmax() 中,我得到的最大值為 2147483647
    它在所有計算機上都是相同的,還是它會改變并且可以增加/減少?
    uj5u.com熱心網友回復:getrandmax() 通常...

    uj5u.com 2022-09-14 01:32:05 more
  • 日期或時間戳的datediff函式

    我有一個函式可以計算 2 個日期或時間戳之間的差異,它作業正常。有沒有辦法修改函式以顯示差異中 TIMESTAMP 的小數部分作為結果的一部分。如果可能的話,我希...

    uj5u.com 2022-09-14 01:31:29 more
  • 我不能將“繼續”命令放在定義中

    比方說,def sample(): if a==1: print(a) else: continuefor i in language: a=i sample()我想在回圈中使用這個函式,但是“繼續...

    uj5u.com 2022-09-14 01:30:29 more
  • HCIA學習筆記二十七:鏈路聚合LACP模式

    一、LACP模式簡介 ? LACP是一個公有的協議,在這個模式下,允許有備份鏈路。然后是所有的活動鏈路都會進行資料轉發,如果某一潭訓動鏈路失效的話,它會從備份鏈路里面選一條鏈路作為活動鏈路,所以它總體的活動鏈路數量是不變的。 二、LACP模式實驗 2.1、拓撲圖 ? 分別在交換機中拖出2臺S5700 ......

    uj5u.com 2022-09-13 07:19:41 more
  • 三層交換機

    一、單臂路由 1.1概念 單臂路由實作不同vlan之間通信 1.2鏈路型別 access鏈路:交換機連接主機的埠 trunk鏈路:交換機連接路由器的埠 hybrid鏈路:華為 1.3子介面 路由的物理介面可以被劃分為多個邏輯介面 每個子介面對應一個vlan網段的網關 1.4單臂路由的配置 (1) ......

    uj5u.com 2022-09-13 07:19:25 more
  • 代碼生成器(CodeBuilder) 2.9 穩定版

    代碼生成器(CodeBuilder) 經過這幾個版本的完善,目前功能也趨于穩定,詳細的在線檔案也得到維護,不失為一款強大的代碼生成工具。 官網:http://www.fireasy.cn/codebuilder 多資料源 資料庫表、欄位和關系等元資料統稱為架構 Schema,它們是生成代碼的源材料。 ......

    uj5u.com 2022-09-13 07:19:05 more
  • 動手實作深度學習(12): 卷積層的實作與優化(img2col)

    9.1 卷積層的運算 傳送門: https://www.cnblogs.com/greentomlee/p/12314064.html github: Leezhen2014: https://github.com/Leezhen2014/python_deep_learning 卷積的forwar ......

    uj5u.com 2022-09-13 07:13:44 more
  • 動手實作深度學習(4): 神經網路的backward實作

    Backward是神經網路訓練程序中包含的一個程序,在這個程序中會通過反饋調節網路中各個節點的權重,以此達到最佳權重引數。在反饋中,loss value是起點,是衡量與label之間差距的值。Loss value 自然是loss function計算得出的。 ......

    uj5u.com 2022-09-13 07:08:15 more
  • UE4 C++ 淺析委托并實作一個簡單的例子

    什么是委托? 我們先來看看官方的解釋: 委托 是一種泛型但型別安全的方式,可在C++物件上呼叫成員函式。可使用委托動態系結到任意物件的成員函式,之后在該物件上呼叫函式,即使呼叫程式不知物件型別也可進行操作。復制委托物件很安全。你也可以利用值傳遞委托,但這樣操作需要在堆上分配記憶體,因此通常并不推薦。請 ......

    uj5u.com 2022-09-13 07:07:40 more