![](/img/trans.png)
[英]How to sort N elements given a list of tuples stating their known order?
[英]How to sort a list of N elements and then replace missing values between 0 to N with -1
示例測試用例
Input Output
- Test Case 1 3 1 4 2 5 0 0 1 2 3 4 5
- Test Case 2 4 7 -1 9 -1 5 3 -1 -1 -1 -1 -1 -1 3 4 5 -1 7 -1 9
你可以看到缺失的數字在它們缺失的地方被 -1 替換(即以排序的方式)我怎樣才能實現這個輸出,我能夠通過
num = list(set((map(int, input().split()))))
num.sort()
您可以將輸入列表中的數字存儲在set 中。 然后要獲取輸出列表,您可以遍歷數字范圍並檢查它們是否在集合中:
in_list = [4, 7, -1, 9, -1, 5, 3, -1, -1, -1]
s = set(in_list)
out_list = [i if i in s else -1 for i in range(len(in_list))]
print(out_list) # [-1, -1, -1, 3, 4, 5, -1, 7, -1, 9]
def sort(list):
length = len(list) - 1
unsorted = True
while unsorted:
for element in range(0,length):
unsorted = False
if list[element] > list[element + 1]:
hold = list[element + 1]
list[element + 1] = badList[element]
list[element] = hold
else:
unsorted = True
i = 0
while i < range(len(list)-1):
if list[i+1] - list[i] != 1 and list[i+1] != -1 and list[i] != -1:
list.insert(i+1, -1)
i = i - 1
i = i - 1
return list
list = [3,1,4,2,5,0]
print(sort(list))
這是你追求的嗎?
Python 列表理解是一個非常簡單的概念。 您可以遍歷列表並根據您的條件獲取列表的元素。
考慮以下示例:
old_list = [1, 2, 3, 4, 5]
new_list = []
for elem in old_list:
new_list.append(elem)
print(new_list) # [1, 2, 3, 4, 5]
該代碼基本上是從另一個創建列表。 這里沒什么好看的。 但這不是pythonic
方法。 讓我們用pythonic
方式來做:
old_list = [1, 2, 3, 4, 5]
new_list = [elem for elem in old_list]
這完全相同。 但是為什么我們不直接將old_list
復制到new_list
呢? 因為列表理解不僅僅可以用於復制元素。 看到這個:
old_list = [1, 2, 3, 4, 5]
new_list = [elem+1 for elem in old_list]
print(new_list) # [2, 3, 4, 5, 6]
現在您創建了一個不同的列表! 您可以對列表元素進行任何操作來創建一個新元素。
由於python也有三元運算,因此也可以這樣做:
a = 3 if x>2 else 4
這段代碼的縮寫:
if x>2:
a = 3
else:
a = 4
當您將列表推導式和三元運算結合起來時,只需 1 行代碼即可解決您的問題。
a = [1, 2 ,3 ,4 ,5]
def zerofy(arr, n):
return [-1 if 0<=elem<=n else elem for elem in arr]
zerofy(a, 2)
# [-1, -1, 3, 4, 5]
這就是我的做法(如果我正確理解了您的問題)
test1 = [3, 1, 4, 2, 5, 0]
test2 = [4, 7, -1, 9, -1, 5, 3, -1, -1, -1]
print([i if i in test1 else -1 for i in range(0, len(test1))])
print([i if i in test2 else -1 for i in range(0, len(test2))])
>>>[0, 1, 2, 3, 4, 5]
>>>[-1, -1, -1, 3, 4, 5, -1, 7, -1, 9]
純 Python 方法將涉及列表推導式、 range
和set
。 如果您對較大數組的性能感興趣,我建議使用 NumPy 等 3rd 方庫:
import numpy as np
a = np.array([3, 1, 4, 2, 5, 0])
b = np.array([4, 7, -1, 9, -1, 5, 3, -1, -1, -1])
def reindexer(x):
res = np.arange(len(x) + 1)
res[~np.isin(res, x)] = -1
return res
reindexer(a) # array([0, 1, 2, 3, 4, 5])
reindexer(b) # array([-1, -1, -1, 3, 4, 5, -1, 7, -1, 9])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.