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

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

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

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

Q&A

解決済

4回答

3928閲覧

Pythonで複数の配列内の要素同士を足し合わせたい

spin99

総合スコア9

Python

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

0グッド

0クリップ

投稿2018/08/21 02:21

編集2018/08/21 05:29

言語:python
実行環境:Anaconda、Win10

プログラミング初心者です。
会社で必要に迫られて簡単なツール作りをやることになりましたが行き詰っています。

実現したいことはタイトル通りなのですが、例えば以下のようなことを行いたいです。

list_A=['あ','い']
list_B=['う','え']

これらの要素同士を足し合わせて新しいlist_Cを作りたいです。

list_C=['あう\n','いえ\n']

というように、同じ配列番号同士を足して、後ろに改行やタブ文字を入れたいです。

単純に

list_C[0] = list_A=[0] + list_B=[0]

だと以下のエラーが出ます。

TypeError:must be str, not int

多分基本的な内容なのだと思いますが、ググっても出てこなかったので質問いたしました。

ご教示よろしくお願いいたします。

↓元のコードの一部を追記します。

python

1f = open('A.txt', 'r') 2line = f.readlines() 3list=[] 4f.close 5 6for w in line: 7 if 'AAA'in w or 'BBB' in w: 8 list.append(1) 9 else: 10 list.append(0) 11 12f = open('B.txt','r') 13ja = f.readlines() 14f.close 15 16res=[] 17for ja, list in zip(ja,list): 18 res.append(a+b) 19 20f = open('result.txt','w') 21for x in res: 22 f.write(x) 23f.close 24

A.txt内には半角英数字の文字列が数行書かれています。
B.txt内には日本語の文字列が数行書かれています。

A.txt内のデータに該当する文字があれば1,なければ0をlistに格納し、B.txt内のデータをjaに格納、jaとlistの各要素を結合しres[]に格納したいです。

↓自分の中のイメージです
res = [ja[0]+list[0],ja[1]+list[1],・・・]

ご回答いただいたコードも一通り試しましたが、まだTypeErrが出ます。
zip,mapは試しました。
また、ループ文を使わずに各要素を地道に足すことも試しましたがTypeErrです。

他に試せることはあるでしょうか?

皆様のご回答のおかげでエラーが改善しました。
ありがとうございました。
次回より最初からコードを提示いたします。

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

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

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

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

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

mather

2018/08/21 02:27

書いたソースコードを当該部分の前後も含めて、Markdownのコードブロックで囲んで提示してください。
yukihisa

2018/08/21 02:27

list_A=[0] + list_B=[0] 余計な=が入っていますが、これはコードでは入っていないのでしょうか?コードでも入っているならまずそこを消してみましょう。
fuzzball

2018/08/21 02:28

「必要に追われて」→「必要に迫られて」
yukihisa

2018/08/21 03:51

そのままだとlistの中身がintなのでtype errorになってるのかな。
guest

回答4

0

ベストアンサー

typeErrorは

python

1 if 'AAA'in w or 'BBB' in w: 2 list.append('1') 3 else: 4 list.append('0')

に変更したらなくなると思います。
回答者が想定していた部分と全く違う部分のエラーなので、コードははじめからある程度提示するようにお願いします。

あと、

python

1for ja, list in zip(ja,list): 2 res.append(ja + list)

ですね。

投稿2018/08/21 03:56

編集2018/08/21 03:58
yukihisa

総合スコア672

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

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

spin99

2018/08/21 05:29

問題が改善しました。 お忙しい中ありがとうございました。
guest

0

python

1from itertools import repeat 2list_A=['あ','い'] 3list_B=['う','え'] 4list_C = [*map("".join, zip(list_A, list_B, repeat("\n")))]

投稿2018/08/21 02:46

YouheiSakurai

総合スコア6142

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

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

0

python

1n = len(list_A) #list_Aの長さを代入 2list_C = [] #入れる箱 3 4for i in range(n): 5 new_word = list_A[i] + list_B[i] + "\n" 6 list_C.append(new_word)

多分これでいけるはずです。

もしAとBのリストの長さが違う場合は、どちらかに合わせるか、
try分で条件分岐かな、と思います。

一度試してみて下さい。

投稿2018/08/21 02:30

YugoNakashima

総合スコア42

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

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

0

単純に

list_C[0] = list_A=[0] + list_B=[0]
だと以下のエラーが出ます。
TypeError:must be str, not int

不要なイコールが多過ぎます。
その方針で書くならlist_C[0] = list_A[0] + list_B[0]です。

追記:
あれ、これならTypeErrorではなくSyntaxErrorが出るはずですね。
貼るコードを間違えて居ませんか?


リスト長に関係なく書くなら、zipが便利です。

Python

1list_C = [] 2for a, b in zip(list_A, list_B): 3 list_C.append(a+b+'\n')

リスト内包表記という記法もあります。

Python

1list_C = [a+b+'\n' for a, b in zip(list_A, list_B)]

質問編集を受けて

A.txt内のデータに該当する文字があれば1,なければ0をlistに格納し、B.txt内のデータをjaに格納、jaとlistの各要素を結合しres[]に格納したいです。

文字列と数値を結合したいということでしょうか?
それならば、少し工夫が必要です。

Python

1>>> a = 'spam' 2>>> b = 42 3>>> 4>>> a + b 5Traceback (most recent call last): 6 File "<stdin>", line 1, in <module> 7TypeError: must be str, not int 8>>> 9>>> a + str(b) 10'spam42' 11>>> 12>>> f'{a}{b}' 13'spam42'

投稿2018/08/21 02:27

編集2018/08/21 03:56
LouiS0616

総合スコア35658

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問