我有一个清单
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])
这甚至有可能吗?
答案 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_[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中的分组功能。如果列表中的字符串数为奇数,则可以指定填充值。