将每2个字符串合并为1个字符串

时间:2018-09-12 15:05:06

标签: python list

我有一个清单

list = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']

我想获取诸如["247400015203223811, DPF", "247400015203223813, ZPF"]之类的字符串列表 将每2个字符串合并为1个字符串

我尝试过

list2 = []
list = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']

        for i in range(0, len(list), 2):
            list2.append(list[i] + list[i])

这甚至有可能吗?

9 个答案:

答案 0 :(得分:15)

您几乎拥有它,可以使用以下列表理解:

mylist = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']

mylist2 = [mylist[i]+', '+mylist[i+1]for i in range(0,len(mylist),2)]

>>> mylist2
['247400015203223811, DPF', '247400015203223813, ZPF']

确保不要将关键字list用作变量名,因为它掩盖了python内置类型(我将其更改为mylist

答案 1 :(得分:6)

我认为切片和zip在这里可以很好地工作:

# assuming list of stringals is named `strings`
even_indexed = strings[::2]
odd_indexed = strings[1::2]

# create pairs to join
pairs = zip(even_indexed, odd_indexed)

# join all pairs
result = list(map(', '.join, pairs))

无法测试,但这可以使想法变得清晰。

答案 2 :(得分:5)

当然可以,而且您几乎可以得到答案:
您只需要在第二个单词的索引中添加1即可:

list2 = []

list1 = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']

for i in range(0, len(list1), 2):
    list2.append(list1[i] + list1[i+1])

print(list2) # OUTPUT: ['247400015203223811DPF', '247400015203223813ZPF']

但是您可能还希望在两个单词之间加一个点:

list2.append(list1[i] + '.' + list1[i+1]) # OUTPUT: ['247400015203223811.DPF', '247400015203223813.ZPF']

答案 3 :(得分:5)

配对列表中项目的一种常见模式是在列表上获得一个迭代器,然后将其自身zip进行迭代。从那里开始,使用", "加入配对就像调用str.join

# Don't reuse the name list, it already has a meaning
list_ = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']

it = iter(list_)

print([", ".join(pair) for pair in zip(it, it)])
# ['247400015203223811, DPF', '247400015203223813, ZPF']

答案 4 :(得分:2)

您可以切片列表,zip切片,然后map切成join

l = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']
print(list(map(', '.join, zip(l[::2], l[1::2]))))

这将输出:

['247400015203223811, DPF', '247400015203223813, ZPF']

答案 5 :(得分:2)

使用列表理解

list = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']
res = [ ', '.join(x) for x in zip(list[0::2], list[1::2]) ]

输出:

['247400015203223811, DPF', '247400015203223813, ZPF']

答案 6 :(得分:2)

让我们为您提供易于理解的一线式解决方案:

list_ = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']
print([", ".join(i) for i in zip(list_[0::2], list_[1::2])])
# ['247400015203223811, DPF', '247400015203223813, ZPF']

请注意:

  • list_[0::2]是具有偶数索引
  • 的list_的元素列表
  • list_[1::2]是具有奇数索引的list_的元素列表

答案 7 :(得分:2)

zip列表上的迭代器及其自身,以获取两个对。

原理演示:

>>> lst = ['247400015203223811', 'DPF', '247400015203223813', 'ZPF']
>>> it = iter(lst)
>>> list(zip(it, it))
[('247400015203223811', 'DPF'), ('247400015203223813', 'ZPF')]

在列表理解中应用该原理:

>>> [', '.join(s) for s in zip(*[iter(lst)]*2)]
['247400015203223811, DPF', '247400015203223813, ZPF']

切片或中间列表不需要额外的内存。不用摆弄索引。

答案 8 :(得分:2)

import itertools

def grouper(iterable, n, fillvalue=None):
    """ Collect data into fixed-length chunks or blocks.

        grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    """
    args = [iter(iterable)] * n
    return itertools.zip_longest(*args, fillvalue=fillvalue)

x = ["a", "b", "c", "d", "e"]
x_grouped = [", ".join(pair) for pair in grouper(x, 2, "")]

print(x_grouped)  # -> ['a, b', 'c, d', 'e, ']

您可以使用itertools recipe中的分组功能。如果列表中的字符串数为奇数,则可以指定填充值。