[英]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.