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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

1078閲覧

このPythonコードは、どこに文字列を置くんでしょうか?

EXIT

総合スコア43

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/01/29 14:15

Python初日なのでよくわかりません笑
このコードのどこに文字列を入れればいいですか?
▶︎ http://y0m0r.hateblo.jp/entry/20130722/1374501317

python

1# coding=utf-8 2 3 4def is_unique_chars(s): 5 """文字列中に重複する文字があるかどうかチェックする 6 """ 7 if isinstance(s, str): 8 s = s.decode('utf-8') 9 return len(set(list(s))) == len(s) 10 11 12# ascii 13assert is_unique_chars(u"abcdefg") 14assert not is_unique_chars(u"abcdefgg") 15 16# マルチバイト文字(unicode) 17assert is_unique_chars(u"あいうえお") 18assert not is_unique_chars(u"あいうえおお") 19 20# マルチバイト文字(バイト文字列) 21assert is_unique_chars("あいうえお") 22assert not is_unique_chars("あいうえおお")

ちなみに一文字単位の重複を見たいのですが、このコードで合ってますか(できますか)?
漢字の重複を検証したいです。

= 「躾餉馥淹擂搗賽涎處簀俎櫃罐壜盒爨炙茹囓舐啜嗜貪嗅熾炬燵屏」 ←こういうのを、一文字単位で重複確認したい (『躾』餉馥淹擂搗賽涎『躾』處みたいな)

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

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

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

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

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

guest

回答3

0

ベストアンサー

(『躾』餉馥淹擂搗賽涎『躾』處みたいな)

こんな感じでしょうか

Python

1from collections import Counter 2 3s = '躾餉馥淹擂搗賽涎躾處簀俎櫃罐壜盒爨炙茹囓舐啜嗜貪嗅熾炬燵屏' 4 5# 各文字の頻度を求める 6c = Counter(s) # Counter({'躾': 2, '餉': 1, '馥': 1 ~ 7print(c) 8 9# 頻度が2以上なら『』をつけたリストを得る 10l = [ '『'+i+'』' if c[i] > 1 else i for i in s] 11print(l) # ['『躾』', '餉', '馥', ~ 12 13# リストを連結して文字列にする 14ret = ''.join(l) 15print(ret) # 『躾』餉馥淹擂搗賽涎『躾』處簀俎櫃罐壜盒爨炙茹囓舐啜嗜貪嗅熾炬燵屏

なお、削除なら以下のような感じでできます。後に現れたものが削除されます。

Python

1s = '躾餉馥淹擂搗賽涎躾處簀俎櫃罐壜盒爨炙茹囓舐啜嗜貪嗅熾炬燵屏' 2 3ret = '' 4for i in s: 5 # 重複していないものだけ取り出す 6 if i not in ret: 7 ret += i 8 9print(ret) # 躾餉馥淹擂搗賽涎處簀俎櫃罐壜盒爨炙茹囓舐啜嗜貪嗅熾炬燵屏

投稿2019/01/29 15:07

編集2019/01/29 15:38
can110

総合スコア38260

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

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

EXIT

2019/01/29 15:18

おおお!これがやりたかったことです、本当にありがとうございます!!
can110

2019/01/29 15:28

コメント欄読みました。削除したい場合のコードも回答に追記しました。
hayataka2049

2019/01/29 15:33 編集

setを使って速度に配慮するなら、文字列の連結もlistに入れておいてstr.joinの方が良いです。速度無視でシンプルに書くなら、 result = "" for char in string: if char not in result: result += char みたいなので
can110

2019/01/29 15:41 編集

> if char not in result: あ。わざわざset使うことないですね。 コード修正しました。ご指摘ありがとうございます。
EXIT

2019/01/29 15:36

>>can110さん 大変助かります。本当にありがとうございます!
EXIT

2019/01/29 15:40

>>hayataka2049さん 始めたてでよくわからないですが、ありがとうございます!今後意味が分かるようになったら参考にさせていただきます。 (私に言ってなかったらごめんなさい)
guest

0

まず、それはpython2の古~いコードなので、python3を使いたいのであれば(そうだと思いますが)ちゃんと動きません。情報系の分野では古くなった情報には価値がないので、2013年の記事ではなく、もう少し新し目の記事を探しましょう。

そして、「一文字単位の重複を見たい」のであればそのコードは適していません。単に重複があるかどうかをチェックするだけです。

やりたいことがいまいちよくわからないのと、どうやって書いたら良いのかすぐには思いつかないので、具体的なコードはなしで回答します。あしからず。

投稿2019/01/29 14:21

hayataka2049

総合スコア30933

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

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

EXIT

2019/01/29 14:48

そうなんですね!ありがとうございます。 やりたいことは、「躾餉馥淹擂搗賽涎處簀俎…」こういう文字列の中から(一文字も同じ漢字が被ってはいけないので)同じ漢字を探して、削除したいです。要は『漢字の被りを0にしたい』です。 ちなみに、"unicode順に並べたら重複漢字が分かるんじゃ?"と思って、 https://note.nkmk.me/python-reverse-reversed/ の最後らへんにある「文字列を逆順に並べ替え」の所のコードを実行すると、 File "/Users/Owner/Desktop/untitled.py", line 1 SyntaxError: Non-UTF-8 code starting with '\xe5' in file /Users/Owner/Desktop/untitled.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details というエラーが出てしまったのですが、これはどういうことで、どうしたらちゃんと実行できますか…?
hayataka2049

2019/01/29 14:56 編集

具体的なコードがないので当てずっぽうですが、たぶんshift-jisとかでソースコードを書いてるんじゃないですかね。特にエンコーディング宣言を指定しなければ、python3ではコードは自動的にUTF-8で書かれているとみなされて、UTF-8のエンコーディングと矛盾する文字列がコードに入った瞬間にエラーになります。 UTF-8で保存してみてください。
pepperleaf

2019/01/29 14:56

ソースコード UTF-8 で書いていますか?
hayataka2049

2019/01/29 15:05 編集

ちなみに、 >unicode順に並べたら重複漢字が分かるんじゃ? どうやって元に戻すつもりでしょうか。いや、元の順番を維持したままという要件があるかどうかにもよるか。どちらにせよ逆順は関係ありません。
EXIT

2019/01/29 15:08

>>hayataka2049さん >>pepperleafさん UTF-8で実行したら、エラーがなくなりちゃんと実行できました!ありがとうございます。
EXIT

2019/01/29 15:31 編集

>>hayataka2049さん 確かに、実行しても入力した文字列が逆順になるだけで意味ありませんでした…笑 (Unicode順で結果が出てくると思っていた)(Unicode順の逆順で表示されても重複文字を見つけるのには支障ないかと) ちなみに元の順番はどうなってもいいです。 Unicode順に並べるのってできるんでしょうか? edit: 上の can110さん のコードでやりたいことができたので大丈夫になりました! 色々と教えてくださり、ベストアンサーを hayataka2049さん と can110さん 両方に付けたいのですが、できないのでやりたいことができた can110さん の方をベストアンサーにさせていただきます。すみません!でもとても感謝しています????
hayataka2049

2019/01/29 15:32 編集

can110さんの回答で解決済みなら私から改めて書くことはしません。ちなみに文字列もsorted関数に渡して文字単位でソートしたlistにすることができますね。 >>> sorted("hogefuga") ['a', 'e', 'f', 'g', 'g', 'h', 'o', 'u']
EXIT

2019/01/29 15:34

>>hayataka2049さん 打ったりするのが遅くてedit間に合いませんでした笑 おーありがとうございます!!
hayataka2049

2019/01/29 15:41

BAに関してはそれでいいと思います。Python初日なので、勉強頑張ってくださいね。あと、勉強するならあまりこのサイトを頼らないように (しょっちゅう質問が上がって、毎回これくらいコメントが伸びちゃうとタルいです。たまになら良いけど)
EXIT

2019/01/29 15:44

>>hayataka2049さん はい、ありがとうございます(^O^)
guest

0

python

1data = '躾餉馥淹擂搗賽涎處簀俎櫃罐壜盒爨炙茹囓舐啜嗜貪嗅熾炬燵屏' 2len(data) == len(set(data)) # True, 重複無し 3 4data = '躾餉馥淹擂搗賽涎躾處' 5len(data) == len(set(data)) # False, 重複有り

投稿2019/01/29 14:31

YouheiSakurai

総合スコア6142

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

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

EXIT

2019/01/29 14:52

ありがとうございます! どこをどう入れ替えましたか?^^;…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問