在 Python 列表中的每个第 n 个元素之后插入元素 [英] Insert element in Python list after every nth element

查看:36
本文介绍了在 Python 列表中的每个第 n 个元素之后插入元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个这样的 Python 列表:

letters = ['a','b','c','d','e','f','g','h','i','j']

我想在每个第 n 个元素后插入一个x",假设该列表中的三个字符.结果应该是:

letters = ['a','b','c','x','d','e','f','x','g','h','我','x','j']

我知道我可以通过循环和插入来做到这一点.我实际上正在寻找的是一种 Python 风格的方式,也许是一种单线方式?

解决方案

我有两个一体式衬垫.

给定:

<预><代码>>>>字母 = ['a','b','c','d','e','f','g','h','i','j']

  1. 使用enumerate获取索引,每3个rd字母添加'x'eg: mod(n, 3) == 2,然后连接成字符串和list().

    <预><代码>>>>list(''.join(l + 'x' * (n % 3 == 2) for n, l in enumerate(letters)))['a', 'b', 'c', 'x', 'd', 'e', 'f', 'x', 'g', 'h', 'i', 'x', 'j']

    但是作为 @sancho.s 指出如果任何元素有一个以上的字母,这将不起作用.

  2. 使用嵌套推导式来展平列表列表(a),以 3 个为一组切片,如果距离末尾小于 3,则添加 'x'清单.

    <预><代码>>>>[x for y in (letters[i:i+3] + ['x'] * (i < len(letters) - 2) fori in xrange(0, len(letters), 3)) for x in y]['a', 'b', 'c', 'x', 'd', 'e', 'f', 'x', 'g', 'h', 'i', 'x', 'j']

(a) [item for subgroup in groups for item in subgroup] 展平一个锯齿状的列表列表.

Say I have a Python list like this:

letters = ['a','b','c','d','e','f','g','h','i','j']

I want to insert an 'x' after every nth element, let's say three characters in that list. The result should be:

letters = ['a','b','c','x','d','e','f','x','g','h','i','x','j']

I understand that I can do that with looping and inserting. What I'm actually looking for is a Pythonish-way, a one-liner maybe?

解决方案

I've got two one liners.

Given:

>>> letters = ['a','b','c','d','e','f','g','h','i','j']

  1. Use enumerate to get index, add 'x' every 3rd letter, eg: mod(n, 3) == 2, then concatenate into string and list() it.

    >>> list(''.join(l + 'x' * (n % 3 == 2) for n, l in enumerate(letters)))
    
    ['a', 'b', 'c', 'x', 'd', 'e', 'f', 'x', 'g', 'h', 'i', 'x', 'j']
    

    But as @sancho.s points out this doesn't work if any of the elements have more than one letter.

  2. Use nested comprehensions to flatten a list of lists(a), sliced in groups of 3 with 'x' added if less than 3 from end of list.

    >>> [x for y in (letters[i:i+3] + ['x'] * (i < len(letters) - 2) for
         i in xrange(0, len(letters), 3)) for x in y]
    
    ['a', 'b', 'c', 'x', 'd', 'e', 'f', 'x', 'g', 'h', 'i', 'x', 'j']
    

(a) [item for subgroup in groups for item in subgroup] flattens a jagged list of lists.

这篇关于在 Python 列表中的每个第 n 个元素之后插入元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆