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

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

新規登録して質問してみよう
ただいま回答率
85.50%
リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

3回答

294閲覧

リストの中から1回しか使われない数字を取り出す方法について

Spursfun2002

総合スコア15

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2020/05/11 21:08

編集2020/05/12 00:43

すいません、言い方が悪かったです。1回しか使われない数字をOutputとして出す場合どうすればいいのかと。。。

# Read a list of integers from input. # Each number is separated by a space. # Do not modify line 5. print("Enter a list of numbers separated by spaces:") list = [int(s) for s in input().split()] # the variable 'list' contains the list of numbers # this is to show you the list, you can delete this line. # your code goes here. if list[0] != list[1]: print(list[0], end =' ') for x in range(1, list[-2]): if (list[x] != list[x+1] and list[x] != list[x-1]): print(list[x], end = ' ') if list[-1] != list[-2]: print(list[-1], end = ' ')

このようなコードを作ったのですが、重複している数字を取り除くことができませんでした。どこが間違っているでしょうか??

Outputがこうなってしまったんです。

Enter a list of numbers separated by spaces: 4 3 5 2 5 1 3 5 4 3 5 5

求めたいOutput

4 2 1

自分で改善してみた結果

# Read a list of integers from input. # Each number is separated by a space. # Do not modify line 5. print("Enter a list of numbers separated by spaces:") list = [int(s) for s in input().split()] # the variable 'list' contains the list of numbers # this is to show you the list, you can delete this line. # your code goes here. list.sort() num = len(list) if list[0] != list[1]: print(list[0], end = ' ') for x in range(1, num-1): if (list[x] != list[x + 1] and list[x] != list[x - 1]): print(list[x], end = ' ') if list[num - 2] != list[num - 1]: print(list[num - 1], end = ' ')

こうなったのですが肝心のOutputが

1 2 4

となってしまいました。
リストの順番をキープするにはどのようにすればいいのでしょうか?

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

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

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

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

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

quickquip

2020/05/12 00:35

言葉でうまく書けないなら入力例と望む結果をたくさん例を添えるといいですよ。 4 3 5 2 5 1 3 5 に対しては 4 2 1 でしょうか?
guest

回答3

0

追加:質問の内容が編集されてしまったので、一度しか出現しない文字を探すには

Py

1from collections import Counter 2 3l = [ 4, 3, 5, 2, 5, 1, 3, 5] 4c = Counter(l) 5 6print([k for k, v in c.items() if v == 1]) 7# [4, 2, 1]

以下元の質問、重複の排除の回答

Python3.8ならdictは順序が維持されるので、これが最速です。

Py

1l = [ 4, 3, 5, 2, 5, 1, 3, 5] 2d = dict.fromkeys(l) 3print(list(d)) 4 5# [4, 3, 5, 2, 1]

Python3.7ならOrderedDictを使って

from collections import OrderedDict l = [ 4, 3, 5, 2, 5, 1, 3, 5] d = OrderedDict.fromkeys(l) print(list(d)) # [4, 3, 5, 2, 1]

順序を維持しなくていいならPython3.7でも3.8のコードと同じでOKです。`

投稿2020/05/11 23:57

編集2020/05/12 00:04
Kenji.Noguchi

総合スコア358

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

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

Spursfun2002

2020/05/12 00:04

すいませんでした わざわざ修正していただきありがとうございます。
Kenji.Noguchi

2020/05/12 02:16

ご質問の例題はlistやスライス、インデックスの指定の練習だと思いますが、本番で使うコードは簡潔に書いてスピードも追求できると良いです。標準で用意されているライブラリを使えばバグの心配もないです。もちろんトリッキーな一行プログラムを書こうと言う意味ではありません。
guest

0

ベストアンサー

求める解が4 3 5 2 1であるのが前提とします。何が間違っているのか?

  • 隣あっている要素が重複しているかどうかしか調べていない
  • range関数の使い方が間違っている。配列のインデックスをなぜ配列の中身から取り出そうとしているのか。

配列の2番目~後ろから2番目のインデックスを取得してきたいのなら、for x in range(1, len(list)-1):
range関数がどのような挙動をするのか、どのような目的で使用するのか、しっかり復習してください。

それを踏まえ、この処理の方針としては、答えの配列を新しく作り、要素の重複をチェックしながら1つずつappendしていくのが良いかと思います。

python3

1list2 = [] 2for x in list: 3 # list2の全要素とxが重複していないのをチェックしてから 4 list2.append(x) 5print(list2)

重複チェックするコードはぜひご自分で考えてみてください。基本的にfor文を使って総当たりすれば大丈夫です。

投稿2020/05/11 23:52

hope_mucci

総合スコア4447

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

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

Kenji.Noguchi

2020/05/12 00:07

総当たりだとO(N^2)になるでしょう。
hope_mucci

2020/05/12 00:10

この問題の核心はそこではないでしょう。
guest

0

こんな感じですか?

Python

1lst = [int(s) for s in input("--> ").split()] 2lst = sorted(set(lst), key=lst.index) 3print(' '.join(map(str, lst))) 4 5 6--> 4 3 5 2 5 1 3 5 # と入力 74 3 5 2 1 # 出力 8```ちなみにlistというのはPythonの標準ライブラリの名前なのでlistという変数や関数は作らない方がいいですよ

投稿2020/05/11 21:19

編集2020/05/11 23:57
ForestSeo

総合スコア2720

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問