🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1027閲覧

【python】配列への格納を適切に行いたい

t-_-

総合スコア11

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/03/11 04:52

編集2021/03/11 05:04

配列への格納を適切に行いたいです。

プログラム

########## 関数 ########## def straged_lists(get_elements): # 取得したelementをひとつずつ分解する for item in get_elements: # 空の場合実行しない if len(item.text) != 0: #print(item.text) #output_test = item.text.replace('"', '') #writer.writerow([str_days, item.text]) #writer.writerow([item.text]) writer.writerow([item.text]) output_lists.append(item.text) ########## 関数ここまで ########## # 各要素格納配列用意 output_lists = [] # 風 get_elements = driver.find_elements_by_css_selector('tr.td-windCombined') # 関数として各処理実行 straged_lists(get_elements) # print(type(output_lists)) # stringに変換 output_lists_str = ' '.join(map(str, output_lists)) s = '-'.join([str(i) for i in output_lists]) print("----s-----") print(s) print("--- len(output_lists) ---") print(len(output_lists)) print("--- len(output_lists_str) ---") print(len(output_lists_str)) print("--- output_lists_str out ---") num = 0 while num < 10: # print('output_lists_str[%d] = ' + s[num] % (num)) print('output_lists_str No.%d = %s' % (num, s[num])) num += 1

上記プログラムの出力

---- output_lists ----- ['#\n22\n32\n#\n14\n31\n#\n12\n20\n#\n11\n18\n#\n4\n16\n#\n11\n16\n#\n11\n16\n#\n10\n16\n#\n9\n14\n#\n12\n17\n#\n11\n18\n#\n16\n22\n#\n17\n28\n#\n12\n23\n#\n9\n16\n#\n9\n15\n#\n9\n20\n#\n8\n18\n#\n18\n26\n#\n29\n41\n#\n35\n58\n#\n25\n50\n#\n13\n34\n#\n23\n33\n#\n15\n31\n#\n14\n23\n#\n6\n21\n#\n4\n12\n#\n7\n10\n#\n11\n16\n#\n10\n18\n#\n16\n24\n#\n12\n23\n#\n9\n18\n#\n5\n13\n#\n6\n11\n#\n5\n10\n#\n11\n16\n#\n9\n16\n#\n10\n15\n#\n9\n15\n#\n9\n15\n#\n19\n25\n#\n23\n31\n#\n31\n43\n#\n33\n46\n#\n39\n55\n#\n26\n56'] ---- s ----- # 22 32 # 14 31 ・ ・ ・ (略) ・ ・ ・ # 39 55 # 26 56 --- len(output_lists) --- 1 --- len(output_lists_str) --- 367 --- output_lists_str out --- output_lists_str No.0 = # output_lists_str No.1 = output_lists_str No.2 = 2 output_lists_str No.3 = 2 output_lists_str No.4 = output_lists_str No.5 = 3 output_lists_str No.6 = 2 output_lists_str No.7 = output_lists_str No.8 = # output_lists_str No.9 =

理想の出力

"#"や"(空白)"を除外し、各配列に数字を格納したいです。

--- output_lists_str out --- output_lists_str No.0 = 22 output_lists_str No.1 = 32 ・ ・ ・

配列の問題かとは思いますが、何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

  1. output_listsから#\nを取り除く(replace)
  2. \nで分割
  3. for文で回す

と変えてみました。

python3

1output_lists = ['#\n22\n32\n#\n14\n31\n#\n12\n20\n#\n11\n18\n#\n4\n16\n#\n11\n16\n#\n11\n16\n#\n10\n16\n#\n9\n14\n#\n12\n17\n#\n11\n18\n#\n16\n22\n#\n17\n28\n#\n12\n23\n#\n9\n16\n#\n9\n15\n#\n9\n20\n#\n8\n18\n#\n18\n26\n#\n29\n41\n#\n35\n58\n#\n25\n50\n#\n13\n34\n#\n23\n33\n#\n15\n31\n#\n14\n23\n#\n6\n21\n#\n4\n12\n#\n7\n10\n#\n11\n16\n#\n10\n18\n#\n16\n24\n#\n12\n23\n#\n9\n18\n#\n5\n13\n#\n6\n11\n#\n5\n10\n#\n11\n16\n#\n9\n16\n#\n10\n15\n#\n9\n15\n#\n9\n15\n#\n19\n25\n#\n23\n31\n#\n31\n43\n#\n33\n46\n#\n39\n55\n#\n26\n56'] 2output_without_sharp = output_lists[0].replace("#\n","") 3output_split = list(map(int, output_without_sharp.split("\n"))) 4for num in range(10): 5 print(f'output_lists_str No.{num} = {output_split[num]}') 6# output_lists_str No.0 = 22 7# output_lists_str No.1 = 32 8# output_lists_str No.2 = 14 9# output_lists_str No.3 = 31 10# output_lists_str No.4 = 12 11# output_lists_str No.5 = 20 12# output_lists_str No.6 = 11 13# output_lists_str No.7 = 18 14# output_lists_str No.8 = 4 15# output_lists_str No.9 = 16

投稿2021/03/11 05:25

jeanbiego

総合スコア3966

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

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

t-_-

2021/03/11 05:35

早速のご回答ありがとうございます。 素晴らしいです。 printでnumを出力する部分も非常に簡潔で 勉強になりました。 ありがとうございました。
guest

0

現状のコードで得られた文字列を分解するのではなく、個別に文字列を得る方向の回答です。

質問文のコードでは、driver.find_elements_by_css_selector('tr.td-windCombined')でtr要素を選択していますが、実際にデータが書かれているのは、tr要素の中のtd要素です。得られた結果が、ひとつの長い文字列になっているのは、これが原因です。

driver.find_elements_by_css_selector('tr.td-windCombined td')のように、子孫セレクターを使えば、td要素のリストがget_elementsに得られます。変数名からして、意図しているのはこちらでは?

こうして修正したget_elementsをイテレーターとしてfor文で繰り返し処理すると、それぞれのtd要素が得られ、textによって内容のテキスト部分が得られます。具体的には、#\n22\n32のように、改行(\n)で区切られた3行分のデータです。

この質問には書いてありませんが、質問者の以前の質問から類推すると、2行目の値が「風速」、3行目の値が「瞬間最大風速」ですね。

そこで、これらの値を2つのリストに分けて格納するようにします。得られたテキストをsplitして、2つめと3つめの値をそれぞれリストに(整数化してから)appendすればいいでしょう。

Python

1get_elements = driver.find_elements_by_css_selector('tr.td-windCombined td') 2 3wind_speed_list = [] 4max_wind_speed_list = [] 5for item in get_elements: 6 lst = item.text.split() 7 wind_speed_list.append(int(lst[1])) 8 max_wind_speed_list.append(int(lst[2])) 9 10print(wind_speed_list) 11print(max_wind_speed_list)

result

1[22, 14, 12, 11, 4, 11, 11, 10, 9, 12, 11, 16, 17, 12, 9, 9, 9, 8, 18, 29, 35, 25, 13, 23, 15, 14, 6, 4, 7, 11, 10, 16, 12, 9, 5, 6, 5, 11, 9, 10, 9, 9, 19, 23, 31, 33, 39, 26] 2[32, 31, 20, 18, 16, 16, 16, 16, 14, 17, 18, 22, 28, 23, 16, 15, 20, 18, 26, 41, 58, 50, 34, 33, 31, 23, 21, 12, 10, 16, 18, 24, 23, 18, 13, 11, 10, 16, 16, 15, 15, 15, 25, 31, 43, 46, 55, 56]

投稿2021/03/11 06:19

Daregada

総合スコア11990

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問