一次将列表元素追加到列表两个元素的列表

时间:2020-11-04 16:22:00

标签: python python-3.x list

我想遍历Python(3.8.5)列表,并一次将两个项目附加到列表列表中。 源列表将始终具有偶数个元素。

示例输出:

!@[User::FileWasCreatedToday]

我已经尝试过range()函数,for循环,while循环等。我正在寻求一种雄辩而有效的方法来完成此任务。以下是我使用示例数据探索的两种不正确途径。 谢谢

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

for i in range(2): 
    for letter in letters:
        letter_pairs.append([letter, letter])

6 个答案:

答案 0 :(得分:2)

使用邮政编码:

[list(x) for x in zip(letters[:-1:2], letters[1::2])]

答案 1 :(得分:0)

您可以将切片与skip的{​​{1}}参数一起使用。

range()

现在letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'] letter_pairs = [] for i in range(0, len(letters), 2): slice_to_append = letters[i:i+2] if len(slice_to_append) == 2: letter_pairs.append(slice_to_append) letter_pairs

或者,在列表理解中:

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

letter_pairs = [letters[i:i+2] for i in range(0, len(letters), 2) if i < len(letters) - 1] 确保if i < len(letters) - 1始终具有两个元素。

答案 2 :(得分:0)

如果要一次在列表中添加两个项目,可以执行以下操作:

<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.8.0/echarts.min.js"></script>

<div class="chart-container">
  <div class="chart has-fixed-height" id="columns_basic"></div>
</div>

这是在letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'] letter_pairs = [] try: for i in range(0, len(letters),2): letter_pairs.append([ letters[i], letters[i+1] ]) pass: pass # or you can append the last one if you want 上进行两遍遍的遍历,每次将字母移到列表中该位置上,然后在列表中的该位置之后一个,并将其附加到letters上。

答案 3 :(得分:0)

SetOnInsert

输出:

Inc

说明:

这里,我们在字母列表上创建了迭代器(因此没有额外的内存分配),然后将其放置在列表中两次(可能是一个元组或另一个可迭代的对象),然后使用{{1 }}模块将元素按组2进行分组。对于包含3个或更多元素的组,您可以轻松地进行相同操作-只需将from itertools import zip_longest letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'] args = [iter(letters)] * 2 list(zip_longest(*args, fillvalue=None)) 替换为必要的数字即可。另外,[('a', 'b'), ('c', 'd'), ('e', 'f'), ('g', 'h'), ('i', 'j'), ('k', None)] 可以用内置的zip_longest函数代替,但是如果列表中没有足够的元素进行分组,它将失败。

答案 4 :(得分:0)

您可以使用迭代器来满足您的需求。

iter_ = iter(letters)
while (a := next(iter_, None)) and (b := next(iter_, None)):
    letter_pairs.append([a, b])
if a: letter_pairs.append([a])
print(letter_pairs)
>>> [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'j'], ['k']]

答案 5 :(得分:0)

源列表中的元素总是偶数,那么您使用range()的方式应该对您有用,

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
list1= [letters[i:i+2] for i in range(0,len(letters),2)]
print(list1)

输出:

[['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'j']]
相关问题