如何删除Python列表中的每第n个术语

时间:2021-01-04 21:40:03

标签: python

我需要使用 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]

感谢您的帮助!

6 个答案:

答案 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 开始,所以它也会删除第一个元素)

我也是新手,但我希望这对您有所帮助。