Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据值是否已存在于列表中追加_Python_Python 3.x_List - Fatal编程技术网

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']