[英]Python - list + tuples length of elements
我在試圖解決這個問題時遇到了一些問題(因為我是 python 的純初學者)。
我有一個名字列表: names_2 = ["Lars", "Per", "Henrik"]
我需要將其轉換為一個元組,該元組包含每個元素的長度 + 它自身的元素。
我試過這個:
namesTuple = tuple(names_2 + [len(name) for name in names_2])
Output 這是:( ('Lars', 'Per', 'Henrik', 4, 3, 6)
我正在尋找的 output 是('Lars', 4, 'Per', 3, 'Henrik', 6)
有誰能幫忙嗎?
您可以在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)
names_2 = ["Lars", "Per", "Henrik"]
names = []
for name in names_2:
names.append(name)
names.append(len(name))
names = tuple(names)
遍歷名稱 append 名稱本身及其長度為列表,並將列表轉換為元組。
或者作為單行(但你最終會得到一個元組的元組):
names_2 = ["Lars", "Per", "Henrik"]
names = tuple((name, len(name)) for name in names_2)
Zip 名稱列表和長度列表,然后展平結果列表並將其轉換為元組。
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 的回答)
namesTuple = tuple(value for name in names_2 for value in (name, len(name)))
首先創建一個元組的元組: ((name_1,lenght_1), (name_2,lenght_2),...) zip function 是存在的。
其次,你必須展平這個元組的元組。
[In]
names = ["Lars", "Per", "Henrik"]
[In]
zip_tupled = tuple(zip(names, [len(x) for x in names]))
[Out]
zip_tupled = (('Lars', 4), ('Per', 3), ('Henrik', 6))
[In]
final = tuple(item for subtuple in zip_tupled for item in subtuple)
[Out]
final = ('Lars', 4, 'Per', 3, 'Henrik', 6)
這個解決方案非常接近 schwobaseggl 的解決方案......但不那么直接/直接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.