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

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

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

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

Q&A

0回答

595閲覧

リスト内で50文字以下の文字列を持つ要素を削除したい

退会済みユーザー

退会済みユーザー

総合スコア0

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

0グッド

1クリップ

投稿2021/01/02 09:13

編集2021/01/02 12:16

前提・実現したいこと

プログラミング初心者です。調べてもよくわからなかったので質問させていただきます。
twitter APIを使用して取得したデータを扱うための関数を作ろうとしています。

集めたデータはtweets_dateという名のリストに格納しており、要素の数は200です。また、要素1つの要素毎に、['created_at', 'id', 'id_str', 'text', 'truncated', 'entities', 'metadata', 'source', 'in_reply_to_status_id', 'in_reply_to_status_id_str', 'in_reply_to_user_id', 'in_reply_to_user_id_str', 'in_reply_to_screen_name', 'user', 'geo', 'coordinates', 'place', 'contributors', 'is_quote_status', 'retweet_count', 'favorite_count', 'favorited', 'retweeted', 'possibly_sensitive', 'lang']のデータが含まれています。その中でもツイート内容は'text':の後に続いて入力されています。
プライバシーの問題などもありますので詳しくは書けませんが、例としてはtweets_date[0]には
{'contributors': None, 'coordinates': None, 'created_at': 'Fri Dec 25 05:14:16 +0000 2020', 'entities': {'hashtags': [], 'symbols': [],......'text': 'ツイート内容', .......'utc_offset': None, 'verified': False}}
といった風にデータが格納されています。

私はツイートのテキストが50文字未満の場合はTrueを返し、それ以外の場合はFalseを返す関数を作りたいです。そして、その関数をリスト内の全ての関数に適応させ、ツイートの文字列の長さが50文字以下のツイートを排除し、新しいリストに格納したいです。

発生している問題・エラーメッセージ

新しいリストの中身が元のリストの[0]のみになってしまう。

該当のソースコード

python

1def short_tweets(tweets_date): 2 3 for short_tweet in tweets_date: 4 len_text = int(len(short_tweet['text'])) 5 if len_text >= 50: 6 return True 7 else: 8 False 9 10tweets_filtered = short_tweets(tweets_date)

試したこと

スライスを使用ししようとしたらオブジェクトエラーが発生した為、やめました。

補足情報(FW/ツールのバージョンなど)

Python3
jupyterでコードを書いています。

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

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

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

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

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

TakaiY

2021/01/02 09:40

・ 突然登場する tweet_date には何がどのように入っているのでしょう? ・ 関数に渡される tweets には何がどのように入っているのでしょう? それぞれ、具体的な例を示していただけると回答しやすいかと思います。
退会済みユーザー

退会済みユーザー

2021/01/02 10:54

追記・修正依頼ありがとうございます。 tweet_dateはリストの名前で、例を追記しました。 また、tweetsとtweet_dateの中身は同様の形式であることを想定しております。 このような掲示板への投稿が初めてなので、他にも不明瞭な点がありましたらご指摘をお願いいたします。
meg_

2021/01/02 11:06

「for short_tweet in tweets:」の「tweets」は未定義ですが何でしょうか?
退会済みユーザー

退会済みユーザー

2021/01/02 11:11

「tweets_date」のことです。こちらに入力しなおす際に間違えてしまったみたいです。 確認不足ですみません。
siruku6

2021/01/02 11:22 編集

len_text >= 50 のときしか i の値が増えていないようです。 そうすると、`tweet_date[i]['text']`の結果がなかなか変わらないことがあったりしそうですが、それは想定した動作でしょうか?
退会済みユーザー

退会済みユーザー

2021/01/02 11:35

ご指摘ありがとうございます。 リスト全ての要素に’short_tweets'関数を適応したいので、その動作は想定していません。 ひとまず、素直にelseの場合にもiの値が増えるように記述しなおします。
siruku6

2021/01/02 11:38

すみません、把握しているのか確認する意味で質問してしまいました。 ご存じない可能性があるので念のためお伝えしますが、`short_tweet`には`tweets_date[i]`が入っていますので、変数`i`は実は不要です。 具体的には、 `int(len(tweets_date[i]['text']))`の代わりに、`int(len(short_tweet['text']))`と書くことができます。 iを使わない方がすっきりしますし、pythonを使う方はそうする方が多いので、iなしで進めてもよいかもしれません。
退会済みユーザー

退会済みユーザー

2021/01/02 11:43 編集

返答いただきありがとうございます。 iについてのことは知りませんでした。関数についてもう少し勉強しておきます。 ご指摘いただいた通り、iを記述しない方法にコードを修正しておきます。
siruku6

2021/01/02 11:52

>`int(len(tweets_date['text']))` この部分は、`tweets_date['text']`だと動かないです....`short_tweet['text']`です... 実際動かしたりして本当にそういったデータが入っているか確認してみるとはっきりわかるかと思います (loop内でprint()などすれば簡単に確認できるはずです)
退会済みユーザー

退会済みユーザー

2021/01/02 12:15

返答いただきありがとうございます。 先ほど訂正したコードを入力するとtypeエラーが発生しましたがご指摘いただいた通りに入力するとtypeエラーを回避することができました。 しかし、いまだに上手く関数が機能しません。short_tweets関数の働きを素直にTrueとFalseを返すものにし、新しい’tweets_filtered’という名のリストに移すときにループさせた方がいいですか?
siruku6

2021/01/02 12:22

>short_tweets関数の働きを素直にTrueとFalseを返すものにし、新しい’tweets_filtered’という名のリストに移すときにループさせた方がいいですか? やり方はいろいろあると思いますが、一番初歩的な方法は、1ループごとに一時的な配列にデータを格納してあげる方法です。 このあたりが参考になるとは思いますが、中古でもいいのでpythonの書籍を購入されるのをおすすめします。 https://ai-trend.jp/programming/python/intro2/
退会済みユーザー

退会済みユーザー

2021/01/02 12:34

返答いただきありがとうございます。 別のアプローチの仕方も考えてみたいと思います。 ご丁寧にサイトのURLまでありがとうございます。書籍を購入についても検討いたします。
siruku6

2021/01/02 12:36

すみません。 この内容であれば自力で解決してほしいという思いで、動作するソースを書くことはしませんでした...
退会済みユーザー

退会済みユーザー

2021/01/02 12:45

出来れば自力で解決したいのですが、要素内のツイート内容を指定する方法が分からなかったので質問したので、そこだけでも教えてもらえませんか?
siruku6

2021/01/02 12:50 編集

>要素内のツイート内容を指定する方法 なるほど。 >例としてはtweets_date[0]には ここに書いてある内容が正しければ、loop内で tweets_date[0]['entries']['text'] か short_tweet['entries']['text']を呼び出すことで取得できるはずです。 loop内でprint(short_tweet['entries']['text'])と書けば、中身が見れると思いますがどうでしょうか?
退会済みユーザー

退会済みユーザー

2021/01/02 12:55

度重なる丁寧な返答ありがとうございます。printを使うことで見ることができました! どうやら初めからテキストを指定できていたみたいです。 後はループを回すだけなのでもう少し頑張ってみます。
ppaul

2021/01/02 13:26

[1, 2, 3]のようなものをリストと言います。このリストの要素は全て整数です。 ['ab', 'cd', 'efg', 100]は文字列と数字を要素とするリストです。 [[1, 2, 3],['ab', 'cd', 'efg', 100]]はリストを要素とするリストで、その第0要素は[1, 2, 3]で第1要素は['ab', 'cd', 'efg', 100]です。 リストの要素にアクセスする場合は[番号]を使います。LIST1 = [1, 2, 3]としたときには、LIST1[0]は第0要素の1となり、、LIST1[2]は第2要素の3となります。 LIST3 = [[1, 2, 3],['ab', 'cd', 'efg', 100]]としたときにはLIST3[0]は[1, 2, 3]で、LIST3[1]は['ab', 'cd', 'efg', 100]となります。 このとき、LIST3[0]は[1, 2, 3]なので、LIST3[0][0]は1になります。、LIST3[1][0]は'ab'になります。、LIST3[1][3]は100になります。 LIST3 = [[1, 2, 3],['ab', 'cd', 'efg', 100]]としたとき、LIST4 = LIST3[0]を行うと、LIST4には[1, 2, 3]が入ります。このとき、LIST4[0]は1です。 {'first_name' : 'John', 'second_name' : 'Cleese', 'age' : 18}のようなものを辞書と言います。 :の前にある'first_name'や'age'などをキーと言います。:の後ろにある'John'や18を値といいます。キー'first_name'の値が18であると言います。 辞書にアクセスする場合は。[キー]を使います。DICT1 = {'first_name' : 'John', 'second_name' : 'Cleese', 'age' : 18}のときDICT1['first_name']は'John'となります。 DICT3 = {'monty' : {'first_name' : 'John', 'second_name' : 'Cleese', 'age' : 18}, 'python' : {'first_name' : 'Eric', 'second_name' : 'Idle', 'age' : 17}}は値が辞書であるような辞書です。DICT3['monty']は{'first_name' : 'John', 'second_name' : 'Cleese', 'age' : 18}という辞書です。。DICT3['monty']['first_name']は'John'です。 DICT4 = DICT3['monty']とすれば、DICT4['first_name']は'John'です。 というようなことを理解するのが大事だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問