我需要使用 Python 解决一个问题。我可以在没有代码的情况下解决问题,如果您在互联网上搜索答案是公开的。我无法让我的代码解决这个问题。不管怎样,问题来了:
<块引用>Steve 从左边开始按顺序重复写数字 1、2、3、4 和 5 向右,形成一个 10,000 位数字的列表,从 123451234512 开始...... 然后他从他的列表中每三个数字(即第 3、第 6、 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 位数字的代码。
在以前的课程中,我写了一个代码来删除每个第 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)
我需要帮助更改该代码,以便它每删除第三个词就遍历一次列表并打印出剩余的数字。
所以这意味着不是输出
3
2
4
1
它会
[1,2,4]
感谢您的帮助!
答案 0 :(得分:1)
这是我想出的解决方案。我不喜欢将每个切片变成一个元组,只是为了从迭代器中消费并让 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)
输出:
10
编辑 - 根据马蒂亚斯的建议:
def skip_nth(iterable, n):
yield from (value for index, value in enumerate(iterable) if (index + 1) % n)
答案 1 :(得分:1)
react-query
答案 2 :(得分:0)
仅测试了 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..
答案 3 :(得分:0)
一个实施可能就在这里。
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))
答案 4 :(得分:0)
我希望我理解你的问题。 如果我这样做,与其编写所有这些,如果您打算每删除三个项目,为什么不编写更少的代码。并且,避免使用保留字......而不是使用“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))
答案 5 :(得分:0)
第一件事 - 尽量不要使用 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 开始,所以它也会删除第一个元素)
我也是新手,但我希望这对您有所帮助。