這是我的清單:
l = ['m','o','b','i','l','e', ' ','a','l','i',' ']
我需要的輸出:
out = ['e','l','i','b','o','m', ' ','i','l','a',' ']
所以,到目前為止我已經想出了這個解決方案
start = 0
end = len(lst)-1
for i in range(start,end 1):
if lst[i]==" ":
break
temp = lst[i] # first
lst[i] = lst[end]
lst[end] = temp
start =1
end -=1
我正在做的是我只用最后一個元素替換第一個值,直到''。但是我將不得不為剩余的值創建另一個 for 回圈。誰能提出更好的解決方案?
不允許將值存盤在單獨的陣列中,只能在此陣列中替換它,但允許使用臨時變數
uj5u.com熱心網友回復:
我有另一個可能對您有用的答案,它不使用任何地圖或串列魔法,也不會創建任何額外的串列。它所做的只是在起始串列中移動值。
l = ['m','o','b','i','l','e', ' ','a','l','i',' ']
start = 0
for a in range(len(l)):
if l[a] == ' ':
start = a 1
if a > start:
for b in range(a, start, -1):
if b > 0:
temp = l[b]
l[b] = l[b - 1]
l[b - 1] = temp
print(l)
這個答案比我的其他答案稍微復雜一些。基本上發生的是它在陣列中移動,將最后一個元素移動到前面。例如,第一次迭代將從 開始['m'],什么也不做。第二個將以 開頭['m', 'o'],然后將 移到'o'前面,因此它將以 結尾['o', 'm]。第三次迭代將從 開始['o', 'm', 'b'],并將 移到'b'前面,以 結束['b', 'o', 'm']。每次它看到一個空格時,它都會重置“前面”,因此它會翻轉單詞而不是整個陣列。
uj5u.com熱心網友回復:
這是我的解決方案。它更容易閱讀和理解。
l = ['m','o','b','i','l','e', ' ','a','l','i',' ']
first = 0
end = len(l)-1
mid = 0
for i in range(len(l)):
if l[i]==" ":
mid = i
break
def Rev(l, start, end):
while start<end:
l[start],l[end] = l[end], l[start]
start =1
end -=1
Rev(l, first, mid-1)
Rev(l, mid, end)
print(l)
uj5u.com熱心網友回復:
您可以使用陣列魔法以一種非常簡單的方式來完成它,而無需任何匯入的函式。
l = ['m','o','b','i','l','e', ' ','a','l','i',' ']
wordsList = "".join(l).split(" ")
reversedWordsList = [e[::-1] for e in wordsList]
outputArray = list(" ".join(reversedWordsList))
print(outputArray)
這將陣列連接成一個字串,并在空間上拆分它以創建一個包含每個單詞的陣列。然后它手動反轉每個單詞,然后將這些單詞重新連接成一個字串,并將該字串拆分為一個字符陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315947.html
