[英]How to remove every nth term in a Python list
我需要使用 Python 解決問題。 我可以在沒有代碼的情況下解決問題,如果您在互聯網上搜索答案是公開的。 我無法讓我的代碼解決這個問題。 無論如何,這是一個問題:
史蒂夫從左到右按順序重復寫了數字 1、2、3、4 和 5,形成了一個 10,000 個數字的列表,從 123451234512.... , 6th, 9th, ... 數字從左邊開始),然后從結果列表中刪除每第四個數字(即剩余的從左邊開始的第 4、8、12、... 數字),然后刪除每個從那時剩下的第五位數字。 2019 年、2020 年、2021 年的三位數字之和是多少?
我已經寫出 python 代碼以將所有數字打印到列表中。 我需要弄清楚如何刪除每個第 n 個數字。
list = []
value = 1
for i in range (10000):
list.append (value)
value = value + 1
if value == 6:
value = 1
這是寫出前 10,000 位數字的代碼。
在之前的 class 中,我編寫了一個代碼來刪除每個第 n 個術語並將其打印出來。 該代碼如下所示:
n = 3
def RemoveThirdNumber(int_list):
pos = n - 1
index = 0
len_list = (len(int_list))
while len_list > 0:
index = (pos + index) % len_list
print(int_list.pop(index))
len_list -= 1
nums = [1, 2, 3, 4]
RemoveThirdNumber(nums)
print(list)
我需要幫助來更改該代碼,以便每隔三個術語刪除一次它會遍歷列表並打印出剩余的數字。
所以這意味着不是 output
3
2
4
1
這將是
[1,2,4]
感謝您嘗試提供幫助!
這是我想出的解決方案。 我不喜歡必須將每個切片變成一個元組,只是為了從迭代器中消費並讓chunk
可能等於一些虛假的東西。 也許有人可以檢查一下,讓我知道我是否在某個地方犯了錯誤? 或者只是建議其他可愛的itertools
食譜。 顯然,三位數字的總和是10
:
from itertools import cycle, islice
digits = islice(cycle([1, 2, 3, 4, 5]), 10000)
def skip_nth(iterable, n):
while chunk := tuple(islice(iterable, n)):
yield from islice(chunk, n-1)
sum_of_digits = sum(islice(skip_nth(skip_nth(skip_nth(digits, 3), 4), 5), 2019, 2022))
print(sum_of_digits)
Output:
10
編輯 - 根據馬蒂亞斯的建議:
def skip_nth(iterable, n):
yield from (value for index, value in enumerate(iterable) if (index + 1) % n)
a = [1,2,3,4,5] * (10000//5)
a = [a[i] for i in range(len(a)) if i%3 != 2]
a = [a[i] for i in range(len(a)) if i%4 != 3]
a = [a[i] for i in range(len(a)) if i%5 != 4]
print(a[2019:2022]) # --> [2, 5, 3]
print(sum(a[2019:2022])) # --> 10
僅使用 100 個進行測試。
bigList = []
value = 1
for i in range (100):
biglist.append(value)
value += 1
if value == 6:
value = 1
# if you print here you get [1,2,3,4,5,1,2,3...]
x = 3
del biglist[x-1::x] #where x is the number of "steps" - in your case 3
# if you print here - biglist ==> 1,2,4,5,2,3 etc..
一個實施可能就是這里。
def RemoveThirdNumber(int_list,every):
rList=[]
i=0
for element in int_list:
i+=1
if i%every!=0:
rList.append(element)
return rList
nums = range(1,101)
print(RemoveThirdNumber(nums,3))
我希望我能理解你的問題。 如果我這樣做了,而不是寫所有這些,如果你要刪除每三個項目,為什么不寫更少的代碼。 並且,避免使用保留字......而不是使用 'list' 作為變量名,使用類似 'lst' 或其他的東西
lst = []
val = 1
for i in range(10000):
lst.append(val)
val = val + 1
if val == 6:
val = 1
def remove_third_item(your_list):
for i in your_list:
if i%3==0:
your_list.remove(i)
return your_list
print(remove_third_item(lst))
首先,盡量不要使用 Python 內置名稱作為“列表”來命名變量。 它可能會導致問題。
嘗試使用過濾方法。
values_list = []
value = 1
for i in range(10000):
values_list.append(value)
value = value + 1
if value == 6:
value = 1
filtered = filter(lambda x: (values_list.index(x) + 1) % 3 != 0, values_list)
filtered_to_list = [element for element in filtered]
print(filtered_to_list)
過濾器返回生成器,這就是為什么使用列表推導來獲取它的元素。 Lambda 函數檢查它是否是列表的第三個元素( + 1 到它的索引,因為索引從 0 和 0 % 0 == 0 開始,所以它也會刪除第一個元素)
我也是新手,希望對你有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.