質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4124閲覧

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/07/07 00:46

TypeError: unsupported operand type(s) for +: 'int' and 'tuple' とエラーが出ました。permutationsで
配列aの要素のインデックスより後に入れ替えた場合は、配列bの配列aの要素の入れ替えたインデックスの値を配列として出力させたいです(この結果を*とする)。なので理想のアウトプットは[*,permutationsで入れかえた様々な配列]というものになります。

import itertools a = [1,3,4,8,6] b = [1,7,9,3,4] result = [] for x in itertools.permutations(a): tmp = [] for i, v in enumerate(x): print(i, v) if i > a.index(v): tmp.append( dict(zip(a, b))[v] ) result.append( (sum(tmp), list(x)) ) x1= sorted(result, key=lambda x: x[0]) print(x1) def sum_of_sum_of_sub_sequence(x): return sum(sum(x[:i]) for i in range(1, len(x) + 1)) print([(i, [sum_of_sum_of_sub_sequence(x1)]) for i, x in x1])

とコードを書きました。実行すると上記のエラーが出ました。何が間違っているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1print([(i, [sum_of_sum_of_sub_sequence(x1)]) for i, x in x1]) 2# ^ここ

投稿2017/07/07 01:26

Lhankor_Mhy

総合スコア36076

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/07 01:30

^ここ で示されたx1 の部分の型がおかしいということでしょうか?
Lhankor_Mhy

2017/07/07 01:32

いえ、typoしてますよね?
退会済みユーザー

退会済みユーザー

2017/07/07 01:47

すみません、typoの指摘がよくわからず...。(x1)の中はx1の代わりに何が入ると思いますか?
Lhankor_Mhy

2017/07/07 01:58

typoではなかったのですか。 sum_of_sum_of_sub_sequenceは数値リストの部分配列の合計の合計を求める関数のようですから、数値リストを渡す必要があるんじゃないでしょうか。x1はタプルのリストで、そのタプルの要素は数値とリストですよね?
Lhankor_Mhy

2017/07/07 11:39

難しいですか? unsupported operand type(s) for +: 'int' and 'tuple' は「intとtupleの足し算はできない」というエラーです。 x1[:1]はタプルなので、sum関数でエラーが起きます。 私には何をしたいコードだか分かりませんから、x1にはなにを入れればいいのかは質問者にしか分からないことです(予想はつきますが)。ただ、エラーを解消するには sum_of_sum_of_sub_sequence 関数に数値のリストを渡す必要があります。 または、sumの第2引数にタプルと加算演算ができる型のものを渡すか、のどちらかです。
退会済みユーザー

退会済みユーザー

2017/07/07 11:42

result= sorted(result, key=lambda x: x[0]) と書き換えて print([(i, [sum_of_sum_of_sub_sequence(result)]) for i, x in result]) とx1をresultに置き換えたのですがまだ同じエラーが出ます。resultはlistなのでなぜまだ同じエラーが出るのかがわかりません。どう直せば良いのでしょうか?
Lhankor_Mhy

2017/07/07 11:48

というか、元々 x1 もリストですよ。要素がタプルのリストです。 なので、def sum_of_sum_of_sub_sequence 関数の中でxはたしかにリストですが、x[:1]はタプルです。
退会済みユーザー

退会済みユーザー

2017/07/07 12:19

ありがとうございます!わかりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問