繁体   English   中英

如何在元组中组合列表元素?

[英]How to combine list elements in a tuple?

我正在努力组合元组中的特定列表元素。 希望有任何反馈或帮助! 我是 Python 新手,如果这不是一个好问题,我深表歉意。

如果我有这样的元组列表:

tuple_1 = [('A', 'B', 'C', 'D'), ('A', 'H'), ('B', 'C', 'D', 'A')]

我想组合列表中每个元组中的元素“B”、“C”和“D”:

tuple_1_new = [('A', 'BCD'), ('A', 'H'), ('BCD', 'A')]

我的代码如下所示:

next_insert = [(iter(x)) for x in tuple_1]
tuple_1_new = [i + next(next_insert) + next(next_insert) if i == "B" else i for i in next_insert]

但是当我打印(tuple_1_new)时,它给了我一个输出:

[<tuple_iterator object at ...>, <tuple_iterator object at ...>, <tuple_iterator object at ...>]

我觉得我的代码是正确的,但我对这个输出感到困惑。 再次,对不起,如果这是一个愚蠢的问题。 将不胜感激任何帮助 - 谢谢!

def foo(arr):
    w = "".join(arr)    
    ind = w.find("BCD")
    if ind >= 0:
        ans = list(arr)
        return tuple(ans[:ind] + ["BCD"] + ans[ind + 3:])
    return arr

[foo(x) for x in tuple_1]
# [('A', 'BCD'), ('A', 'H'), ('BCD', 'A')]

列表理解答案:

[tuple([t for t in tup if t not in ['B', 'C', 'D']] + [''.join([t for t in tup if t in ['B', 'C', 'D']])]) for tup in tuple_1]

虽然没有得到想要的输出,但打印:

[('A', 'BCD'), ('A', 'H', ''), ('A', 'BCD')]

注意:在“简单”列表推导中,“for x in iterable_name”创建一个处理循环,使用“x”(或名称集合,如果扩展元组或执行 zip 提取)作为每个循环中的变量。 当在列表推导中执行列表推导时(for 循环在 for 循环中),每个循环将贡献一个或多个变量,这显然不能引起名称冲突。

另一种解决方案,使用生成器:

tuple_1 = [("A", "B", "C", "D"), ("A", "H"), ("B", "C", "D", "A")]

def fn(x):
    while x:
        if x[:3] == ("B", "C", "D"):
            yield "".join(x[:3])
            x = x[3:]
        else:
            yield x[0]
            x = x[1:]


out = [tuple(fn(t)) for t in tuple_1]
print(out)

印刷:

[('A', 'BCD'), ('A', 'H'), ('BCD', 'A')]

假设字符串是单个字母,如您的示例中所示:

tuple_1_new = [tuple(' '.join(t).replace('B C D', 'BCD').split())
               for t in tuple_1]

或者使用 Regen:

tuple_1_new = [tuple(re.findall('BCD|.', ''.join(t)))
               for t in tuple_1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM