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

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

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

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

Python

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

Q&A

解決済

3回答

908閲覧

python 配列 重複

PTK

総合スコア29

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/09/29 07:43

編集2021/09/29 08:20

リスト内で重複したものに名前が被らないように連番をつけたいです。
以下のコードを使用して、配列の1番目から総当たりで検証して重複の配列を取得しました。
ここからさらに二重配列から重複したものを消したいです。
dict.fromkeysを使用してから配列に戻すということもやってみましたが、配列の重複には使えませんでした。ほかに方法を知っている方がいたらお聞きしたいです。

python

1list = ["blue","red","yellow","blue","blue","red","yellow","green"] 2last=[] 3for z in list: 4 indexes = [i for i, x in enumerate(list) if x == z] 5 6 #print(z) 7 if list.count(z) >1: 8 last.append(indexes) 9 10 11print(last) 12#last出力 13#[[0, 3, 4], [1, 5], [2, 6], [0, 3, 4], [0, 3, 4], [1, 5], [2, 6]]

最終的にlist = ["blue1","red1","yellow1","blue2","blue3","red2","yellow2","green"]

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

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

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

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

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

TakaiY

2021/09/29 07:49

「名前が被らないように連番をつけたい」の意味がよくわかりません。 最終的にどのような情報が欲しいのですか?
PTK

2021/09/29 08:20

追記しました!
guest

回答3

0

Python 3.8 以降が対象です。

Python

1src_list = ["blue", "red", "yellow", "blue", "blue", "red", "yellow", "green"] 2dic = {s:c if c > 1 else 0 for s in set(src_list) if (c:=src_list.count(s))} 3ans = [] 4for cs in reversed(src_list): 5 ans.append(cs+(str(dic[cs]) if dic[cs] else '')) 6 dic[cs] -= 1 7 8ans.reverse() 9print(ans) # ['blue1', 'red1', 'yellow1', 'blue2', 'blue3', 'red2', 'yellow2', 'green'] 10

投稿2021/09/29 10:16

lehshell

総合スコア1147

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

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

0

ベストアンサー

一つしかない場合は連番をつけないという(わがまま)仕様のようですので、1回フルスキャンする方法しか思い浮かびませんでした。

Python

1my_list = ["blue", "red", "yellow", "blue", "blue", "red", "yellow", "green"] 2 3dict_counter = {} 4for i in my_list: 5 if not (i in dict_counter): 6 dict_counter[i] = [1, 0] # [0]は検出回数、[1]は連番振り用 7 else: 8 dict_counter[i][0] += 1 9 10answer_list = [] 11for i in my_list: 12 if dict_counter[i][0] > 1: 13 answer_list.append(i + str(dict_counter[i][1] + 1)) 14 dict_counter[i][1] += 1 15 else: 16 answer_list.append(i) 17 18print(answer_list) 19# ['blue1', 'red1', 'yellow1', 'blue2', 'blue3', 'red2', 'yellow2', 'green'] 20 21

投稿2021/09/29 08:55

ikapy

総合スコア1167

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

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

0

以下の 「二次元配列(リストのリスト)の場合」のようなことでしょうか

https://note.nkmk.me/python-list-unique-duplicate/

投稿2021/09/29 07:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問