Python 添加空格以复制列表中的元素
我有以下清单1: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
['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。直接传递字符串将计算单个字母。到目前为止,您尝试了什么,是简单循环还是列表理解?到目前为止,您尝试了什么,是简单循环还是列表理解?