我想制作一個接收隨機串列并僅存盤正數的代碼。但是,如果我使用我撰寫的代碼運行它,我只會得到正數,但順序是相反的。我應該怎么辦?
作為代碼示例,顯示 [3, 2, 1, 0]。我想把它列印出來 [0, 1, 2, 3]。
def filter(list):
flist = []
for i in list:
if list[i]>=0:
flist.append(list[i])
else:
continue
return flist
list = [-1,-2,-3,-4,0,1,2,3]
print(filter(list))
uj5u.com熱心網友回復:
在回傳串列之前排序
def filter(list):
flist = []
for i in list:
if list[i]>=0:
flist.append(list[i])
else:
continue
flist.sort()
return flist
list = [-1,-2,-3,-4,0,1,2,3]
print(filter(list))
輸出:
[0, 1, 2, 3]
uj5u.com熱心網友回復:
嘗試:
print(filter(list[::-1]))
uj5u.com熱心網友回復:
for i in list迭代串列中的專案,而不是索引。由于串列中的前四個專案是負數,因此當您將它們用作索引時,您最終會以相反的順序遍歷串列的后半部分,然后達??到零,然后以正序遍歷串列的前半部分。(如果串列中的所有專案碰巧不是同一個串列的有效索引,您只會得到一個IndexError。)
按索引使用range和遍歷串列中的所有專案len:
# 'filter' and 'list' are both builtin names, don't redefine them
def filter_nat(nums):
flist = []
for i in range(len(nums)):
if nums[i]>=0:
flist.append(nums[i])
else:
continue
return flist
nums = [-1,-2,-3,-4,0,1,2,3]
print(filter_nat(nums)) # [0, 1, 2, 3]
不過,按值迭代更簡單;您只需要使用值本身而不是嘗試將其用作索引:
def filter_nat(nums):
flist = []
for i in nums:
if i >=0:
flist.append(i)
return flist
nums = [-1,-2,-3,-4,0,1,2,3]
print(filter_nat(nums)) # [0, 1, 2, 3]
并且使用理解而不是單獨appending 每個專案更簡單:
def filter_nat(nums):
return [i for i in nums if i >= 0]
nums = [-1,-2,-3,-4,0,1,2,3]
print(filter_nat(nums)) # [0, 1, 2, 3]
uj5u.com熱心網友回復:
你想要什么?與遇到的從左到右閱讀的順序相同或按遞增順序排列的東西?如果按照初始串列中的閱讀順序,答案如下:
函式 append() 將元素添加到串列的末尾。因此,您可以使用 append() 將串列從末尾遍歷到開頭,也可以按照與您相同的順序,使用另一種方式在開頭添加元素。當堅持你的代碼時,我們會有
def filter(list):
flist = []
for i in list:
if list[i]>=0:
flist = [i] flist
else:
continue
return flist
但是,這可以用以下方式寫成更“pythonic”:
def filter(list):
return [i for i in list if i>=0]
uj5u.com熱心網友回復:
嘗試范圍內的 i (len(list)):
您將遍歷串列中的專案數。就我個人而言,它對我來說更容易和更干凈,但每個人都有他的偏好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/527759.html
標籤:Python列表
