代码之家  ›  专栏  ›  技术社区  ›  Chaban33

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

  •  9
  • Chaban33  · 技术社区  · 7 年前

    我有一张单子

    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 回复  |  直到 7 年前
        1
  •  15
  •   sacuL    7 年前

    你差点就成功了,你可以用这个列表来理解:

    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 (取而代之)

        2
  •  6
  •   Reut Sharabani    7 年前

    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))
    

    无法测试,但这能让人明白。

        3
  •  5
  •   Gsk    7 年前


    您只需在第二个单词的索引中添加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']
    
        4
  •  5
  •   Patrick Haugh    7 年前

    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']
    
        5
  •  3
  •   Victor    7 年前
    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 . 如果列表中的字符串数为奇数,则可以指定fillvalue。

        6
  •  2
  •   blhsing    7 年前

    你可以把名单分片, zip 切片和 map join :

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

    这将输出:

    ['247400015203223811, DPF', '247400015203223813, ZPF']
    
        7
  •  2
  •   khelili miliana    7 年前

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

    ['247400015203223811, DPF', '247400015203223813, ZPF']
    
        8
  •  2
  •   Laurent H. chthonicdaemon    7 年前

    让我们为您提供一行式解决方案,易于阅读:

    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] 是列表的元素列表 古怪的
        9
  •  2
  •   timgeb    7 年前

    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']
    

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

    推荐文章