2024-05-16 10:03:09 发布
网友
假设我有一个清单。在
temp = ['A', 'B', 'A', 'B', 'A', 'B']
我在找一种方法来加入里面的细绳计数。在
预期输出:
我可以通过使用列表理解来解决它,但是我正在寻找一种不必指定列表[1, 1, 2, 2, 3, 3]的方法。有可能吗?在
[1, 1, 2, 2, 3, 3]
[j + "_" + str(i) for i, j in zip([1, 1, 2, 2, 3, 3], temp)]
您可以使用字典(或者更好的是,^{})来维护每个项目的计数:
from collections import defaultdict lst = ['A', 'B', 'A', 'B', 'A', 'B'] lst2 = [] d = defaultdict(int) for item in lst: d[item] += 1 lst2.append('{}_{}'.format(item, d[item])) print(lst2) # ['A_1', 'B_1', 'A_2', 'B_2', 'A_3', 'B_3']
要在这里使用列表理解,您需要某种方法在迭代原始列表时更新每个项的状态(即计数器)。为此,您可以使用带默认参数的函数,例如:
您可以将^{}与for循环一起使用:
for
from collections import defaultdict L = ['A', 'B', 'A', 'B', 'A', 'B'] dd = defaultdict(int) res = [] for item in L: dd[item] += 1 res.append(f'{item}_{dd[item]}') print(res) ['A_1', 'B_1', 'A_2', 'B_2', 'A_3', 'B_3']
您可以使用Counter或defaultdict(int)来跟踪一个字符在遇到它们时被看到的次数。在
Counter
defaultdict(int)
>>> from collections import Counter >>> >>> temp = ['A', 'B', 'A', 'B', 'A', 'B'] >>> seen = Counter() >>> >>> result = [] >>> for c in temp: ...: seen.update(c) ...: result.append('{}_{}'.format(c, seen[c])) ...: >>> result >>> ['A_1', 'B_1', 'A_2', 'B_2', 'A_3', 'B_3']
请注意,seen.update(c)可能会有意外的结果,如果您希望temp中有多个字符。演示:
seen.update(c)
temp
根据您希望如何计数以及您期望的数据类型,您可能希望使用该行
seen[c] += 1
而不是
或者,在不进口的情况下:
>>> seen = {} >>> result = [] >>> >>> for c in temp: ...: seen[c] = seen.get(c, 0) + 1 ...: result.append('{}_{}'.format(c, seen[c])) ...: >>> result >>> ['A_1', 'B_1', 'A_2', 'B_2', 'A_3', 'B_3']
您可以使用字典(或者更好的是,^{} )来维护每个项目的计数:
要在这里使用列表理解,您需要某种方法在迭代原始列表时更新每个项的状态(即计数器)。为此,您可以使用带默认参数的函数,例如:
^{pr2}$您可以将^{} 与
for
循环一起使用:您可以使用
Counter
或defaultdict(int)
来跟踪一个字符在遇到它们时被看到的次数。在请注意,
^{pr2}$seen.update(c)
可能会有意外的结果,如果您希望temp
中有多个字符。演示:根据您希望如何计数以及您期望的数据类型,您可能希望使用该行
而不是
或者,在不进口的情况下:
相关问题 更多 >
编程相关推荐