2014-12-03 3 views
0

у меня есть этот список:Количества питона продублировать в списке

['Boston Americans', 'New York Giants', 'Chicago White Sox', 'Chicago Cubs', 'Chicago Cubs', 'Pittsburgh Pirates', 'Philadelphia Athletics', 'Philadelphia Athletics', 'Boston Red Sox', 'Philadelphia Athletics', 'Boston Braves', 'Boston Red Sox', 'Boston Red Sox', 'Chicago White Sox', 'Boston Red Sox', 'Cincinnati Reds', 'Cleveland Indians', 'New York Giants', 'New York Giants', 'New York Yankees', 'Washington Senators', 'Pittsburgh Pirates', 'St. Louis Cardinals', 'New York Yankees', 'New York Yankees', 'Philadelphia Athletics', 'Philadelphia Athletics', 'St. Louis Cardinals', 'New York Yankees', 'New York Giants', 'St. Louis Cardinals', 'Detroit Tigers', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'Cincinnati Reds', 'New York Yankees', 'St. Louis Cardinals', 'New York Yankees', 'St. Louis Cardinals', 'Detroit Tigers', 'St. Louis Cardinals', 'New York Yankees', 'Cleveland Indians', 'New York Yankees', 'New York Yankees'] 

Как я могу удалить дубликаты из этого списка без использования счета, добавлять или метод набора или импорт?

Или то, что я действительно хочу это: как я могу превратить этот список, чтобы распечатать так:

Boston Americans 5 
New York Giants 2 
team_name number_of_duplicates 
team_name number_of_duplicates 
team_name number_of_duplicates 
+0

Вы хотите удалить или просто посчитать время, в которое каждый раз появляется? –

+0

Я хочу, чтобы это имя было указано, сколько раз это имя было в списке. как пример, который я дал. просто потому, что он не использует метод count, append или set – adrianhmartinez

+1

. Если причиной отказа от использования определенных функций является назначение, вы, скорее всего, можете извлечь из лекции, что использовать. Обычно вы сортируете, а затем ходите от первого до последнего, когда предыдущие/текущие отличаются, вы открываете новую «группу» и распечатываете счет для предшествующей «группы». – eckes

ответ

2
l =['Boston Americans', 'New York Giants', 'Chicago White Sox', 'Chicago Cubs', 'Chicago Cubs', 'Pittsburgh Pirates', 'Philadelphia Athletics', 'Philadelphia Athletics', 'Boston Red Sox', 'Philadelphia Athletics', 'Boston Braves', 'Boston Red Sox', 'Boston Red Sox', 'Chicago White Sox', 'Boston Red Sox', 'Cincinnati Reds', 'Cleveland Indians', 'New York Giants', 'New York Giants', 'New York Yankees', 'Washington Senators', 'Pittsburgh Pirates', 'St. Louis Cardinals', 'New York Yankees', 'New York Yankees', 'Philadelphia Athletics', 'Philadelphia Athletics', 'St. Louis Cardinals', 'New York Yankees', 'New York Giants', 'St. Louis Cardinals', 'Detroit Tigers', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'Cincinnati Reds', 'New York Yankees', 'St. Louis Cardinals', 'New York Yankees', 'St. Louis Cardinals', 'Detroit Tigers', 'St. Louis Cardinals', 'New York Yankees', 'Cleveland Indians', 'New York Yankees', 'New York Yankees'] 

for team in [ele for ind, ele in enumerate(l,1) if ele not in l[ind:]]: 
    print("{} {}".format(team,l.count(team))) 
Boston Americans 1 
Chicago Cubs 2 
Boston Braves 1 
Chicago White Sox 2 
Boston Red Sox 4 
Washington Senators 1 
Pittsburgh Pirates 2 
Philadelphia Athletics 5 
New York Giants 4 
Cincinnati Reds 2 
Detroit Tigers 2 
St. Louis Cardinals 6 
Cleveland Indians 2 
New York Yankees 13 

без использования list.count вообще:

for team in [ele for ind, ele in enumerate(l,1) if ele not in l[ind:]]: 
    count = 0 
    for ele in l: 
     if team == ele: 
      count += 1 
    print("{} {}".format(team,count)) 
    count = 0 

Boston Americans 1 
Chicago Cubs 2 
Boston Braves 1 
Chicago White Sox 2 
Boston Red Sox 4 
Washington Senators 1 
Pittsburgh Pirates 2 
Philadelphia Athletics 5 
New York Giants 4 
Cincinnati Reds 2 
Detroit Tigers 2 
St. Louis Cardinals 6 
Cleveland Indians 2 
New York Yankees 13 

Вы не сказали, можно ли использовать Dict или не так:

d = {} 

for team in l: 
    # if we have not seen team before, create k/v pairing 
    # setting value to 0, if team already in dict this does nothing 
    d.setdefault(team,0) 
    # increase the count for the team 
    d[team] += 1 
for team, count in d.items(): 
    print("{} {}".format(team,count)) 

Chicago White Sox 2 
New York Giants 4 
Cincinnati Reds 2 
Boston Red Sox 4 
New York Yankees 13 
Philadelphia Athletics 5 
Pittsburgh Pirates 2 
St. Louis Cardinals 6 
Washington Senators 1 
Boston Braves 1 
Boston Americans 1 
Cleveland Indians 2 
Detroit Tigers 2 
Chicago Cubs 2 
+0

Не могли бы вы объяснить следующую часть вашего кода? '[ele для ind, ele in enumerate (l, 1), если элемент не в l [ind:]]' –

+0

На самом деле, не могли бы вы объяснить, как именно вы указали словарь? Я хотел бы получить более глубокое понимание этого. –

+0

@ ea87, dict просто использует имя каждой команды в качестве ключа и устанавливает значение 0 каждый раз, когда мы сталкиваемся с новой командой, каждый + = 1 просто увеличивает количество для каждой команды в нашем dict, поэтому в конце мы получаем частота/кол-во для каждой команды, если бы мы не ограничивались отсутствием импорта, я бы просто использовал коллекцию. Каунтер-дикт –

0

Вы могли бы сделать новый список, например,

l = ['Boston Americans', 'New York Giants', 'Chicago White Sox', 'Chicago Cubs', 'Chicago Cubs', 'Pittsburgh Pirates', 'Philadelphia Athletics', 'Philadelphia Athletics', 'Boston Red Sox', 'Philadelphia Athletics', 'Boston Braves', 'Boston Red Sox', 'Boston Red Sox', 'Chicago White Sox', 'Boston Red Sox', 'Cincinnati Reds', 'Cleveland Indians', 'New York Giants', 'New York Giants', 'New York Yankees', 'Washington Senators', 'Pittsburgh Pirates', 'St. Louis Cardinals', 'New York Yankees', 'New York Yankees', 'Philadelphia Athletics', 'Philadelphia Athletics', 'St. Louis Cardinals', 'New York Yankees', 'New York Giants', 'St. Louis Cardinals', 'Detroit Tigers', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'Cincinnati Reds', 'New York Yankees', 'St. Louis Cardinals', 'New York Yankees', 'St. Louis Cardinals', 'Detroit Tigers', 'St. Louis Cardinals', 'New York Yankees', 'Cleveland Indians', 'New York Yankees', 'New York Yankees'] 
l2 = [] 
for v in l: 
    if v not in l2: 
     l2 = l2 + [v] 

print(l2) 

Дает:

['Boston Americans', 'New York Giants', 'Chicago White Sox', 'Chicago Cubs', 'Pittsburgh Pirates', 'Philadelphia Athletics', 'Boston Red Sox', 'Boston Braves', 'Cincinnati Reds', 'Cleveland Indians', 'New York Yankees', 'Washington Senators', 'St. Louis Cardinals', 'Detroit Tigers'] 
+0

Вопрос не в том, как я могу удалить дубликат из этого списка без использования метода count, append или set или import? ' – helloV

+0

@helloV Нет' append' больше. Спасибо. Я пропустил это. – Marcin

-2
list=['Boston Americans', 'New York Giants', 'Chicago White Sox', 'Chicago Cubs', 'Chicago Cubs', 'Pittsburgh Pirates', 'Philadelphia Athletics', 'Philadelphia Athletics', 'Boston Red Sox', 'Philadelphia Athletics', 'Boston Braves', 'Boston Red Sox', 'Boston Red Sox', 'Chicago White Sox', 'Boston Red Sox', 'Cincinnati Reds', 'Cleveland Indians', 'New York Giants', 'New York Giants', 'New York Yankees', 'Washington Senators', 'Pittsburgh Pirates', 'St. Louis Cardinals', 'New York Yankees', 'New York Yankees', 'Philadelphia Athletics', 'Philadelphia Athletics', 'St. Louis Cardinals', 'New York Yankees', 'New York Giants', 'St. Louis Cardinals', 'Detroit Tigers', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'Cincinnati Reds', 'New York Yankees', 'St. Louis Cardinals', 'New York Yankees', 'St. Louis Cardinals', 'Detroit Tigers', 'St. Louis Cardinals', 'New York Yankees', 'Cleveland Indians', 'New York Yankees', 'New York Yankees'] 
list1=[] 
list2=[] 
for x in list: 
    if not x in list1: 
     list1.append(x) 
    if x in list1: 
     list2.append(x) 
list2.sort() 
for num,og in enumerate(list2,1): 
    print (num,og) 
1
players = ['Boston Americans', 'New York Giants', 'Chicago White Sox', 'Chicago Cubs', 'Chicago Cubs', 'Pittsburgh Pirates', 'Philadelphia Athletics', 'Philadelphia Athletics', 'Boston Red Sox', 'Philadelphia Athletics', 'Boston Braves', 'Boston Red Sox', 'Boston Red Sox', 'Chicago White Sox', 'Boston Red Sox', 'Cincinnati Reds', 'Cleveland Indians', 'New York Giants', 'New York Giants', 'New York Yankees', 'Washington Senators', 'Pittsburgh Pirates', 'St. Louis Cardinals', 'New York Yankees', 'New York Yankees', 'Philadelphia Athletics', 'Philadelphia Athletics', 'St. Louis Cardinals', 'New York Yankees', 'New York Giants', 'St. Louis Cardinals', 'Detroit Tigers', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'Cincinnati Reds', 'New York Yankees', 'St. Louis Cardinals', 'New York Yankees', 'St. Louis Cardinals', 'Detroit Tigers', 'St. Louis Cardinals', 'New York Yankees', 'Cleveland Indians', 'New York Yankees', 'New York Yankees'] 

players_details, players_name = [], [] 
for each_player in players: 
    if not(each_player in players_name): 
     players_name = players_name + [each_player] 
     players_details = players_details + [[each_player, 1]] 
    else: 
     for index in range(len(players_details)): 
      if players_details[index][0] == each_player: 
       players_details[index][1] = players_details[index][1]+1 

for each in players_details: 
    print '{} : {}'.format(*each) 

Результат:

Boston Americans : 1 
New York Giants : 4 
Chicago White Sox : 2 
Chicago Cubs : 2 
Pittsburgh Pirates : 2 
Philadelphia Athletics : 5 
Boston Red Sox : 4 
Boston Braves : 1 
Cincinnati Reds : 2 
Cleveland Indians : 2 
New York Yankees : 13 
Washington Senators : 1 
St. Louis Cardinals : 6 
Detroit Tigers : 2 
0

Чтобы подсчитать, сколько из каждой записи там в списке, вы можете использовать Counter класс в collections модуле:

l =['Boston Americans', 'New York Giants', 'Chicago White Sox', 'Chicago Cubs', 'Chicago Cubs', 'Pittsburgh Pirates', 'Philadelphia Athletics', 'Philadelphia Athletics', 'Boston Red Sox', 'Philadelphia Athletics', 'Boston Braves', 'Boston Red Sox', 'Boston Red Sox', 'Chicago White Sox', 'Boston Red Sox', 'Cincinnati Reds', 'Cleveland Indians', 'New York Giants', 'New York Giants', 'New York Yankees', 'Washington Senators', 'Pittsburgh Pirates', 'St. Louis Cardinals', 'New York Yankees', 'New York Yankees', 'Philadelphia Athletics', 'Philadelphia Athletics', 'St. Louis Cardinals', 'New York Yankees', 'New York Giants', 'St. Louis Cardinals', 'Detroit Tigers', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'New York Yankees', 'Cincinnati Reds', 'New York Yankees', 'St. Louis Cardinals', 'New York Yankees', 'St. Louis Cardinals', 'Detroit Tigers', 'St. Louis Cardinals', 'New York Yankees', 'Cleveland Indians', 'New York Yankees', 'New York Yankees'] 

from collections import Counter 
c = Counter(l) 
print(c) 

c является затем объект Counter, который содержит количество вхождений в списке для каждой отдельной записи/ключа. Поскольку Counter происходит от dict, вы можете получить к нему доступ, как и любой другой словарь.

Counter({'New York Yankees': 13, 'St. Louis Cardinals': 6, 'Philadelphia Athletics': 5, 'New York Giants': 4, 'Boston Red Sox': 4, 'Chicago White Sox': 2, 'Pittsburgh Pirates': 2, 'Detroit Tigers': 2, 'Cincinnati Reds': 2, 'Cleveland Indians': 2, 'Chicago Cubs': 2, 'Boston Americans': 1, 'Boston Braves': 1, 'Washington Senators': 1}) 
+0

Что здесь говорится? Это именно то, о чем попросил ОП? 'Или то, что я действительно хочу: как я могу превратить этот список, чтобы распечатать вот так? Ну, по крайней мере, пока он не добавил часть импорта ... – PeterE

Смежные вопросы