我有一項任務,使用列表理解將值添加到排序列表。我不允許導入模塊,只能列出理解,最好是一個班輪。我不允許創建函數並使用它們。 我完全在這個問題的黑暗中。希望有人可以幫助:)通過列表理解將值插入排序列表Python
編輯:我不需要改變當前列表。事實上,我現在正在試用我的解決方案.pop,我需要創建一個新的列表,添加正確的元素,但我仍然無法弄清楚。
我有一項任務,使用列表理解將值添加到排序列表。我不允許導入模塊,只能列出理解,最好是一個班輪。我不允許創建函數並使用它們。 我完全在這個問題的黑暗中。希望有人可以幫助:)通過列表理解將值插入排序列表Python
編輯:我不需要改變當前列表。事實上,我現在正在試用我的解決方案.pop,我需要創建一個新的列表,添加正確的元素,但我仍然無法弄清楚。
try:
sorted_a.insert(next(i for i,lhs,rhs in enumerate(zip(sorted_a,sorted_a[1:])) if lhs <= value <= rhs),value)
except StopIteration:
sorted_a.append(value)
我想....
與你的新問題陳述
[x for x in sorted_a if x <= value] + [value,] + [y for y in sorted_a if y >= value]
你當然可以提高大O的複雜性
對於平分的列表,你可以使用bisect.bisect
(供其他讀者參考將來的答案) as:
>>> from bisect import bisect
>>> my_list = [2, 4, 6, 9, 10, 15, 18, 20]
>>> num = 12
>>> index = bisect(my_list, num)
>>> my_list[:index]+[num] + my_list[index:]
[2, 4, 6, 9, 10, 12, 15, 18, 20]
但因爲你不能導入庫,你可以使用sum
和zip
與列表理解表達爲:
>>> my_list = [2, 4, 6, 9, 10, 15, 18, 20]
>>> num = 12
>>> sum([[i, num] if i<num<j else [i] for i, j in zip(my_list,my_list[1:])], [])
[2, 4, 6, 9, 10, 12, 15, 18]
我會用'itertools.chain'來壓扁列表,但這是一個導入的模塊。使用'sum(alist,[])'扁平化對我來說是一個新的成語。 – hpaulj
@hpaulj'itertools.chain'絕對是一種更好的鏈接方式。正如你猜對的那樣; 'sum'用於防止導入 –
其比itertools.chain慢得多...但它符合問題定義(即使在編輯問題後...),這就是爲什麼我的+1:P –
這似乎是非常糟糕深思熟慮的分配。列表推導是功能性結構,不應該用於改變現有列表。他們創建*新列表* –
轉讓可能會在正確的位置添加新增值。我懷疑他們是否意味着改變原始列表。我懷疑我需要在列表理解中使用一個或多個'if'子句。 – hpaulj
@ juanpa.arrivillaga是的,這就是他們的意思,對不起,如果我寫得很差。但我仍然無法弄清楚。我嘗試了一些彈出式元素,如果它們小於值或者它們更大,並且值出現的次數大於1,但它效果不佳 –