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

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

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

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

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

コードレビュー

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

Python

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

Q&A

解決済

3回答

1483閲覧

pythonのリストにおいて、順番を変えずに新しいリストを作る方法について

Spursfun2002

総合スコア15

リストボックス

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

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

コードレビュー

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

Python

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

0グッド

0クリップ

投稿2020/05/12 02:00

このようなコードを作りました。このコードはリストの中から1回しか出てこない数字を最終的に新たなリストとして出すコードです。このコード自体は動くのですが、最初に入力リストの順番が小さい順(1〜)に変わります。sort()が原因なのかなと思いつつ、sort()をなくしてこのコードをもう一度動かしたところ、入力したリストがそのまま何も変換されず出てきました。何が原因なのでしょうか?またどこが間違っているでしょうか?教えていただけると嬉しいです。

# 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はこのような結果になりました。このOutputを反対にすればいいのですが、それではリストごとで違ってきてしまうので、どんなリストがきても順番に沿ってOutputが出てくるようにしたいです。

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

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

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

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

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

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

guest

回答3

0

ベストアンサー

sort()を使うと順番を保持できなくなってしまうので先頭から
判定していくのが早いかと思います。

python

1print("Enter a list of numbers separated by spaces:") 2list = list(map(int,input().split())) 3ans=[] 4for i in list: 5 if(list.count(i)==1): 6 ans.append(i) 7[print(x, end = ' ') for x in ans]

投稿2020/05/12 05:21

編集2020/05/12 05:24
Tiger_

総合スコア94

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

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

Spursfun2002

2020/05/12 14:56

なるほど! ちゃんと作動するようになりました!! ありがとうございます!
guest

0

Python

1lst1 = list(map(int, input("--> ").split())) 2# 4 3 5 2 5 1 3 5 と入力 3lst2 = lst1.copy() 4for num in set(lst2): 5 lst2.remove(num) 6print(list(set(lst1) - set(lst2))) 7# [4, 3, 5, 2, 1]

投稿2020/05/12 06:58

編集2020/05/12 10:21
ForestSeo

総合スコア2720

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

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

0

・原因
sort()は、新しいリストを作らず元のリストの並び順を変更してしまいます。

・問題
if (list[x] != list[x + 1] and list[x] != list[x - 1]):
この方式では、隣り合う前後の数字と同じかどうかだけ判定しています。つまり、同じ数字が離れて存在している場合は「1回しか出てこない数字」と判断されてしまいます。sortされていれば同じ数字は隣同士になるので機能しますが、並び順を変更したくないという場合には良い方式ではないでしょう。
隣接する数字だけでなく、リスト全体で同じ数字が無いかどうか判定する方式(countを使うとか)に変更しないといけません。

ところで、これはどこかのコンテストの問題かなにかですか…? それでしたら、解説などがありそうですが。

投稿2020/05/12 02:22

編集2020/05/12 02:58
jeanbiego

総合スコア3966

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

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

Spursfun2002

2020/05/12 03:14

これはコンテストではないですが、インターネット上で見つけた問題です。
jeanbiego

2020/05/12 07:02

なるほど、勉強用なのですね。がんばってください。
Spursfun2002

2020/05/12 14:52

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問