0

私はこれらのリストを持っています:

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

このコードをバリューリストに適用したい:

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

しかし、私はこのエラーを受け取りました:

TypeError:シーケンスをタイプ'tuple'の非intで乗算することはできません

このエラーの背後にある理由はわかっていると思います。これは、すべての値が個別のタプル内にあるためです。

私の質問は、この値をそれぞれのタプルから削除して、次のようなリストに変換する方法はありますか?

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

forループを実行できるように、既存のリストの構造を手動で編集せずに?

編集:お詫びします!実際にはタプルです!各値の後にコンマを追加しました。ごめん!

4

6 に答える 6

6

作る

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]
于 2012-04-15T07:03:41.557 に答える
6

その後、ちょうど

import itertools
list(itertools.chain(*valuelist))
于 2012-04-15T07:01:58.277 に答える
3
valuelist = [(10.5), (20.5), (21.5), (70.0), (34.5)]

intのリストです:

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

(10.5)は整数です。(10.5,)1つの整数のタプルです。

したがって:

>>> sqvaluelist = [x*x for x in valuelist]
>>> sqvaluelist
[110.25, 420.25, 462.25, 4900.0, 1190.25]
于 2012-04-15T06:41:22.660 に答える
1

はい、1つのライナーで非常に簡単に行うことができます:

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)
于 2012-04-15T06:35:14.093 に答える
1

各タプルの最初の要素にアクセスするだけです。

>>> 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]
于 2012-04-15T06:53:05.557 に答える
1

pythonicの方法でそれを行う:

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

于 2018-12-03T07:56:14.770 に答える