Parfois, je voulais comparer deux listes avec des chaînes comme éléments et récupérer les éléments communs sous forme de liste. Eh bien, je peux le faire, mais je me suis demandé comment le faire moi-même et j'ai réfléchi.
Supposons que vous ayez deux listes comme celle-ci, tag_list et src_list, et que vous souhaitiez récupérer les éléments communs sous forme de liste.
tag_list=['igarashi', 'kubo', 'iguchi']
src_list=['taniguchi', 'matsushita', 'koyama', 'asama',
'marui', 'igarashi', 'kubo', 'kondo']
tag_list comporte trois éléments.
ʻIgarashi et
kubo sont également dans src_list, mais comme il n'y a pas de ʻiguchi
, la valeur attendue est['igarashi', 'kubo']
.
matched_list = []
for tag in tag_list:
for src in src_list:
if tag == src:
matched_list.append(tag)
La première chose qui m'est venue à l'esprit était, bien sûr, ceci. C'est facile à comprendre, mais l'indentation est profonde et légère.
matched_list = []
for tag in tag_list:
matched_list+=filter(lambda str: str == tag, src_list)
Je voulais utiliser les fonctions de manipulation de liste, filter (), map (), reduction (), alors j'ai fait de mon mieux. Est-ce intuitif pour les gens modernes qui sont habitués aux langages avec de nombreuses fonctions de manipulation de tableaux?
src_set = set(src_list)
tag_set = set(tag_list)
matched_list = list(src_set & tag_set)
Quand j'ai cherché sur Google, quelque chose comme ça est soudainement sorti. C'est intuitif d'une certaine manière. Est-ce le fait que le type d'agrégat n'a pas d'ordre? J'ai appris qu'il peut être utilisé dans de tels cas.
Est-il facile à comprendre, lisible, rafraîchissant, semblable à Python et présente des avantages et des inconvénients? J'ai pensé. De plus en plus! Y a-t-il un moyen de l'écrire? Y a-t-il également une différence de vitesse de traitement? J'étais également inquiet. La prochaine fois, je vais créer un grand échantillon de données et le mesurer.
cmp_list.py https://github.com/yamao2253/qiita
Recommended Posts