Python列表+元素的元组长度

2024-10-01 22:37:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试解决这个问题时遇到了一些问题(因为我是python的纯粹初学者)

我有一份名单: names_2 = ["Lars", "Per", "Henrik"]

我需要将其转换为一个元组,元组包含每个元素的长度+元素本身

我试过这个:

namesTuple = tuple(names_2 + [len(name) for name in names_2])

这个的输出是:('Lars', 'Per', 'Henrik', 4, 3, 6)

我正在寻找的输出是('Lars', 4, 'Per', 3, 'Henrik', 6)

有人能帮忙吗


Tags: namein元素forlennames元组初学者
3条回答
names_2 = ["Lars", "Per", "Henrik"]
names = []
for name in names_2:
    names.append(name)
    names.append(len(name))
names = tuple(names)

迭代名称,将名称本身及其长度附加到列表中,然后将列表转换为元组。
或者作为一行程序(但最终会得到一个元组的元组):

names_2 = ["Lars", "Per", "Henrik"]
names = tuple((name, len(name)) for name in names_2)

您可以在tuple构造函数中使用嵌套的生成器表达式,例如:

names_tuple = tuple(x for name in names_2 for x in (name, len(name)))
# ('Lars', 4, 'Per', 3, 'Henrik', 6)

如果要以循环方式构建它,那么首先构建一个列表是有意义的(元组是不可变的):

names = []
for name in names_2:
    # extend (both at once)
    names.extend((name, len(name)))
    # OR append one by one (no spurious intermediate tuple)  
    # names.append(name)
    # names.append(len(name))
names_tuple = tuple(names)

使用长度列表压缩名称列表,然后展平结果列表并将其转换为元组

from itertools import chain

namesTuple = tuple(chain.from_iterable(zip(names_2, map(len, names_2))))

如果您更喜欢不太“功能性”的内容,可以使用生成器表达式

namesTuple = tuple(chain.from_iterable((x, len(x)) for x in names_2))

或(重复@schwobaseggl's answer

namesTuple = tuple(value for name in names_2 for value in (name, len(name)))

相关问题 更多 >

    热门问题