Python 添加空格以复制列表中的元素

Python 添加空格以复制列表中的元素,python,list,list-comprehension,Python,List,List Comprehension,我有以下清单1: ['Tom', 'Michael', 'Tom', 'Tom'] 我想添加一个空格来复制值,以便获得以下输出: ['Tom', 'Michael', 'Tom ', 'Tom '] 当Tom在第一个重复2次时,在结尾处有I空格和第二个2空格 我很喜欢使用这样一行代码 [ f'{x} ' for x in list1 if .... ] 但我真的不确定我该如何将其应用到我的案例中 这就是我迄今为止所尝试的: from collections import Counter

我有以下清单1:

['Tom', 'Michael', 'Tom', 'Tom']
我想添加一个空格来复制值,以便获得以下输出:

['Tom', 'Michael', 'Tom ', 'Tom  ']
当Tom在第一个重复2次时,在结尾处有I空格和第二个2空格

我很喜欢使用这样一行代码

[ f'{x} ' for x in list1 if .... ]
但我真的不确定我该如何将其应用到我的案例中

这就是我迄今为止所尝试的:

from collections import Counter
d =  Counter(list1) 
res = [k for k, v in d.items() if v > 1]
print([ f'{x} ' for x in res ])

是否有一种更有效的方法,包括添加空格?

这将提供您想要的输出:

x = ['Tom', 'Michael', 'Tom', 'Tom']
z=[]
for y in range(len(x)):
    z.append(x[y] + " "*x[:y].count(x[y]))
这将产生一个z值['Tom'、'Michael'、'Tom'、'Tom']

作为列表理解,如下所示:

[x[y] + " "*x[:y].count(x[y]) for y in range(len(x))]

这将提供您想要的输出:

x = ['Tom', 'Michael', 'Tom', 'Tom']
z=[]
for y in range(len(x)):
    z.append(x[y] + " "*x[:y].count(x[y]))
这将产生一个z值['Tom'、'Michael'、'Tom'、'Tom']

作为列表理解,如下所示:

[x[y] + " "*x[:y].count(x[y]) for y in range(len(x))]

这似乎是使用收藏的好机会,如下所示:

from collections import Counter

lst = ['Tom', 'Michael', 'Tom', 'Tom']
nums = Counter()
ans = []

for name in lst:
    ans.append(name + ' ' * nums[name])
    nums[name] += 1
诀窍是使用计数器跟踪名称的出现次数,并在运行时进行更新。请注意,'*nums[name]部分只是说:打印此数量的空格。它按预期工作:

ans
=> ['Tom', 'Michael', 'Tom ', 'Tom  ']

这似乎是使用收藏的好机会,如下所示:

from collections import Counter

lst = ['Tom', 'Michael', 'Tom', 'Tom']
nums = Counter()
ans = []

for name in lst:
    ans.append(name + ' ' * nums[name])
    nums[name] += 1
诀窍是使用计数器跟踪名称的出现次数,并在运行时进行更新。请注意,'*nums[name]部分只是说:打印此数量的空格。它按预期工作:

ans
=> ['Tom', 'Michael', 'Tom ', 'Tom  ']

由于要在每个元素之前添加空格作为出现次数,因此可以使用列表方法。然后将此计数乘以:

l=['Tom','Michael','Tom','Tom'] res=[] 对于我在兰格尔: cnt=l[:i].countl[i] res.appendl[i]+*cnt 或者在一行中:

res=[l[i]+*l[:i].countl[i]表示范围内的i] 两者都给出了预期的结果:

ans
=> ['Tom', 'Michael', 'Tom ', 'Tom  ']
[“汤姆”、“迈克尔”、“汤姆”、“汤姆”] 另一种不同的方法是在一次继续中使用并记住计数,而不是对^2上的每个元素计数:

从集合导入defaultdict l=['Tom','Michael','Tom','Tom'] res=[] d=默认措辞 对于l中的x: cnt=d[x] res.appendx+*cnt d[x]=cnt+1 这样,如果第一次看到元素,其计数将初始化为0

或者,最后,没有任何进口。我们可以使用常规词典,并利用以下方法:

l=['Tom','Michael','Tom','Tom'] res=[] d={} 对于l中的x: res.appendx+*d.setdefaultx,0 d[x]+=1
由于要在每个元素之前添加空格作为出现次数,因此可以使用列表方法。然后将此计数乘以:

l=['Tom','Michael','Tom','Tom'] res=[] 对于我在兰格尔: cnt=l[:i].countl[i] res.appendl[i]+*cnt 或者在一行中:

res=[l[i]+*l[:i].countl[i]表示范围内的i] 两者都给出了预期的结果:

ans
=> ['Tom', 'Michael', 'Tom ', 'Tom  ']
[“汤姆”、“迈克尔”、“汤姆”、“汤姆”] 另一种不同的方法是在一次继续中使用并记住计数,而不是对^2上的每个元素计数:

从集合导入defaultdict l=['Tom','Michael','Tom','Tom'] res=[] d=默认措辞 对于l中的x: cnt=d[x] res.appendx+*cnt d[x]=cnt+1 这样,如果第一次看到元素,其计数将初始化为0

或者,最后,没有任何进口。我们可以使用常规词典,并利用以下方法:

l=['Tom','Michael','Tom','Tom'] res=[] d={} 对于l中的x: res.appendx+*d.setdefaultx,0 d[x]+=1
这里有一个解决方案,可以避免重复使用原始列表上的count

我们构建输出列表,跟踪集合。以前遇到的项的计数器:

from collections import Counter

data = ['Tom', 'Michael', 'Tom', 'Tom']

out = []
counts = Counter()
for item in data:
    out.append(item + ' '*counts[item])
    counts.update((item,))

print(out)
# ['Tom', 'Michael', 'Tom ', 'Tom  ']

注意counts.updateitem中的逗号:因为update需要一个iterable,所以我们传递给它一个元组,其中只包含一个元素,即我们的item。直接传递字符串将对单个字母进行计数。

这里有一个解决方案,可以避免在原始列表中重复使用计数

我们构建输出列表,跟踪集合。以前遇到的项的计数器:

from collections import Counter

data = ['Tom', 'Michael', 'Tom', 'Tom']

out = []
counts = Counter()
for item in data:
    out.append(item + ' '*counts[item])
    counts.update((item,))

print(out)
# ['Tom', 'Michael', 'Tom ', 'Tom  ']

注意counts.updateitem中的逗号:因为update需要一个iterable,所以我们传递给它一个元组,其中只包含一个元素,即我们的item。直接传递字符串将计算单个字母。

到目前为止,您尝试了什么,是简单循环还是列表理解?到目前为止,您尝试了什么,是简单循环还是列表理解?