簡體   English   中英

刪除列表中的元組

[英]Removing tuples in a list

我有這些清單:

sqvaluelist = []
valuelist = [(10.5,), (20.5,), (21.5,), (70.0,), (34.5,)]

我想將此代碼應用於值列表:

for value in valuelist:
    valuesquared = value*value
    sqvaluelist.append(valuesquared,)

但我收到此錯誤:

TypeError: can't multiply sequence by non-int of type 'tuple'

我想我知道此錯誤的原因,是因為每個值都在單獨的元組內。

我的問題是,有什么辦法可以將這些值從它們各自的元組中刪除,並將它們轉換成類似

valuelist = [10.5, 20.5, 21.5, 70.0, 34.5]

無需手動編輯現有列表的結構,以便可以執行for循環?

編輯:我很抱歉! 他們實際上是元組! 在每個值之后添加逗號。 抱歉!

然后就

import itertools
list(itertools.chain(*valuelist))

為了

valuelist = [(10.5,), (20.5,), (21.5,), (70.0,), (34.5,)]

進入

valuelist = [10.5, 20.5, 21.5, 70.0, 34.5]

我會用列表理解

valuelist = [x[0] for x in valuelist]
valuelist = [(10.5), (20.5), (21.5), (70.0), (34.5)]

是一個整數列表:

>>> [(10.5), (20.5), (21.5), (70.0), (34.5)]
[10.5, 20.5, 21.5, 70.0, 34.5]

(10.5)是整數。 (10.5,)是一個整數的元組。

因此:

>>> sqvaluelist = [x*x for x in valuelist]
>>> sqvaluelist
[110.25, 420.25, 462.25, 4900.0, 1190.25]

是的,您可以在一個襯里中輕松完成此操作:

map(lambda x: x, valuelist)

之所以起作用是因為@eumiro指出(10.5)實際上是一個浮點數而不是一個元組。 元組為(10.5,)。

要計算平方,就這么簡單:

map(lambda x: x*x, valuelist)

如果您有一個像(10.5,)這樣的實元組列表,則可以這樣修改它:

map(lambda x: x[0], valuelist)
map(lambda x: x[0]*x[0], valuelist)

只需訪問每個元組的第一個元素:

>>> valuelist = [(10.5,), (20.5,), (21.5,), (70.0,), (34.5,)]
>>> sqvaluelist = [x[0]*x[0] for x in valuelist]
>>> sqvaluelist
[110.25, 420.25, 462.25, 4900.0, 1190.25]

用pythonic的方式做:

sqvaluelist = [v [0] ** 2 for v in valuelist]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM