Если вы считаете, что первое вхождение является правильным, то, что вам нужно в окончательном списке, тогда вы можете попробовать следующее:
dataList= ["john is student",
"student is john",
"john student is",
"alica is student",
"good weather",
"weather good",
]
data = {}
for words in dataList:
data.setdefault(frozenset(words.split()), words)
dataList = data.values()
# dataList is you need
Редактировать
С момента моего последнего ответа вопрос был обновлен с требованием сохранить повторяющиеся значения.
[Ответ]
dataList= ["john is student",
"student is john",
"john student is",
"alica is student",
"good weather",
"weather good",
]
class WordFrequence:
def __init__(self, word, frequence=1):
self.word = word
self.frequence = frequence
def as_list(self):
return [self.word] * self.frequence
def __repr__(self):
return "{}({}, {})".format(self.__class__.__name__, self.word, self.frequence)
counter = {}
for words in dataList:
key = frozenset(words.split())
if key in counter:
counter[key].frequence += 1
else:
counter[key] = WordFrequence(words)
dataList = [] # this is what you need
for wf in counter.values():
dataList.extend(wf.as_list())
Для длинного ввода dataList
вы можете улучшитьмой код, заменив WordFrequence
на recordclass