Python 根据值是否已存在于列表中追加
我有一张空名单。我想在其中添加字符串,但如果它们已经存在,请稍微更改它们。大概是这样的:Python 根据值是否已存在于列表中追加,python,python-3.x,list,Python,Python 3.x,List,我有一张空名单。我想在其中添加字符串,但如果它们已经存在,请稍微更改它们。大概是这样的: names_list = [] names = [ 'John' , 'David', 'John', 'Luis, 'Sean', 'John', 'David'] itter = 1 for _ in names: if any(names[_] in s for s in n
names_list = []
names = [ 'John' , 'David', 'John', 'Luis, 'Sean', 'John', 'David']
itter = 1
for _ in names:
if any(names[_] in s for s in name_list):
button_list.append(names[_] + f'_{itter+1}')
itter+=1
else:
button_list.append(names[_])
In [3215]: def rename_duplicates(old):
...: seen = {}
...: for x in old:
...: if x in seen:
...: seen[x] += 1
...: yield "%s_%d" % (x, seen[x])
...: else:
...: seen[x] = 1
...: yield x
...:
In [3216]: list(rename_duplicates(names))
Out[3216]: ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
names = [ 'John' , 'David', 'John', 'Luis', 'Sean', 'John', 'David']
names_list = []
for i in range(len(names)):
name = names[i]
count = names[:i].count(name) # count the names in the sublist
if count:
names_list.append(f"{name}_{count+1}")
else:
names_list.append(name)
print(names_list)
# ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
姓名:约翰,大卫,约翰,路易斯,肖恩,约翰,大卫
附加后的列表:约翰,大卫,约翰2,路易斯,肖恩,约翰3,大卫2
我是这样想的:
names_list = []
names = [ 'John' , 'David', 'John', 'Luis, 'Sean', 'John', 'David']
itter = 1
for _ in names:
if any(names[_] in s for s in name_list):
button_list.append(names[_] + f'_{itter+1}')
itter+=1
else:
button_list.append(names[_])
In [3215]: def rename_duplicates(old):
...: seen = {}
...: for x in old:
...: if x in seen:
...: seen[x] += 1
...: yield "%s_%d" % (x, seen[x])
...: else:
...: seen[x] = 1
...: yield x
...:
In [3216]: list(rename_duplicates(names))
Out[3216]: ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
names = [ 'John' , 'David', 'John', 'Luis', 'Sean', 'John', 'David']
names_list = []
for i in range(len(names)):
name = names[i]
count = names[:i].count(name) # count the names in the sublist
if count:
names_list.append(f"{name}_{count+1}")
else:
names_list.append(name)
print(names_list)
# ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
然而,这给了我们:约翰,大卫,约翰2,路易斯,肖恩,约翰3,大卫4,最后一个大卫应该是大卫2。我找不到根据特定名称出现的次数来更改itter的方法。
提前感谢您的帮助。您可以有这样一个:
names_list = []
names = [ 'John' , 'David', 'John', 'Luis, 'Sean', 'John', 'David']
itter = 1
for _ in names:
if any(names[_] in s for s in name_list):
button_list.append(names[_] + f'_{itter+1}')
itter+=1
else:
button_list.append(names[_])
In [3215]: def rename_duplicates(old):
...: seen = {}
...: for x in old:
...: if x in seen:
...: seen[x] += 1
...: yield "%s_%d" % (x, seen[x])
...: else:
...: seen[x] = 1
...: yield x
...:
In [3216]: list(rename_duplicates(names))
Out[3216]: ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
names = [ 'John' , 'David', 'John', 'Luis', 'Sean', 'John', 'David']
names_list = []
for i in range(len(names)):
name = names[i]
count = names[:i].count(name) # count the names in the sublist
if count:
names_list.append(f"{name}_{count+1}")
else:
names_list.append(name)
print(names_list)
# ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
你可以有一个这样的
names_list = []
names = [ 'John' , 'David', 'John', 'Luis, 'Sean', 'John', 'David']
itter = 1
for _ in names:
if any(names[_] in s for s in name_list):
button_list.append(names[_] + f'_{itter+1}')
itter+=1
else:
button_list.append(names[_])
In [3215]: def rename_duplicates(old):
...: seen = {}
...: for x in old:
...: if x in seen:
...: seen[x] += 1
...: yield "%s_%d" % (x, seen[x])
...: else:
...: seen[x] = 1
...: yield x
...:
In [3216]: list(rename_duplicates(names))
Out[3216]: ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
names = [ 'John' , 'David', 'John', 'Luis', 'Sean', 'John', 'David']
names_list = []
for i in range(len(names)):
name = names[i]
count = names[:i].count(name) # count the names in the sublist
if count:
names_list.append(f"{name}_{count+1}")
else:
names_list.append(name)
print(names_list)
# ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
对于每个不同的名称,您需要一个单独的itter,以跟踪单独的计数。一种方法是使用集合。计数器:
输出:
['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
>>>
对于每个不同的名称,您需要一个单独的itter,以跟踪单独的计数。一种方法是使用集合。计数器:
输出:
['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
>>>
您还可以对子列表从开始到当前值使用count方法,如下所示:
names_list = []
names = [ 'John' , 'David', 'John', 'Luis, 'Sean', 'John', 'David']
itter = 1
for _ in names:
if any(names[_] in s for s in name_list):
button_list.append(names[_] + f'_{itter+1}')
itter+=1
else:
button_list.append(names[_])
In [3215]: def rename_duplicates(old):
...: seen = {}
...: for x in old:
...: if x in seen:
...: seen[x] += 1
...: yield "%s_%d" % (x, seen[x])
...: else:
...: seen[x] = 1
...: yield x
...:
In [3216]: list(rename_duplicates(names))
Out[3216]: ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
names = [ 'John' , 'David', 'John', 'Luis', 'Sean', 'John', 'David']
names_list = []
for i in range(len(names)):
name = names[i]
count = names[:i].count(name) # count the names in the sublist
if count:
names_list.append(f"{name}_{count+1}")
else:
names_list.append(name)
print(names_list)
# ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
您还可以对子列表从开始到当前值使用count方法,如下所示:
names_list = []
names = [ 'John' , 'David', 'John', 'Luis, 'Sean', 'John', 'David']
itter = 1
for _ in names:
if any(names[_] in s for s in name_list):
button_list.append(names[_] + f'_{itter+1}')
itter+=1
else:
button_list.append(names[_])
In [3215]: def rename_duplicates(old):
...: seen = {}
...: for x in old:
...: if x in seen:
...: seen[x] += 1
...: yield "%s_%d" % (x, seen[x])
...: else:
...: seen[x] = 1
...: yield x
...:
In [3216]: list(rename_duplicates(names))
Out[3216]: ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']
names = [ 'John' , 'David', 'John', 'Luis', 'Sean', 'John', 'David']
names_list = []
for i in range(len(names)):
name = names[i]
count = names[:i].count(name) # count the names in the sublist
if count:
names_list.append(f"{name}_{count+1}")
else:
names_list.append(name)
print(names_list)
# ['John', 'David', 'John_2', 'Luis', 'Sean', 'John_3', 'David_2']