【问题标题】:How do I count by frequency of a letter in index in Python如何在 Python 中按索引中字母的频率计数
【发布时间】:2017-11-02 20:35:04
【问题描述】:

假设您要像这样提供 5 个输入:

hello
hullo
zeros

然后将其存储到类似['hello','hullo','zeros'] 的列表中 我希望它返回一个计算索引中字母频率的字典。它应该返回这样的东西

{h:2,z:1} {e:2,u:1} {l:2,r:1} {l:2,o:1} {o:2,s:1}

【问题讨论】:

  • 请向我们展示您的尝试
  • 看起来像 3 个输入,输入是字符串吗?数组?个别变量?
  • 我也想,但我不知道怎么做。抱歉,第一次使用堆栈

标签: python list dictionary indexing increment


【解决方案1】:

你可以试试这个:

s = ['hello','hullo','zeros']
final_data = [{d:''.join(i).count(d) for d in ''.join(i)} for i in zip(*s)]

输出:

[{'h': 2, 'z': 1}, {'u': 1, 'e': 2}, {'r': 1, 'l': 2}, {'l': 2, 'o': 1}, {'s': 1, 'o': 2}]

编辑:函数式方法:

def get_count(the_index, the_list):
   listing = [i[the_index] for i in the_list]
   return {a:listing.count(a) for a in listing}

【讨论】:

  • 谢谢!这行得通,但你介意向我解释一下 final_data 到底在做什么吗?
  • 是否还有更笨、更精细的方法来实现这个功能?
  • @WangWang final_data 正在创建字典列表,其中存储每个字符在行中出现的次数。 zip 正在转置数据,这意味着我们可以按行而不是按列访问其内容。关于“笨蛋”,你能澄清一下这意味着什么吗?尽管有其他方法可以使用单行来解决这个问题,但这是尽可能复杂的。
  • 对不起,我刚开始编码。对于列表中的每个字符串,该函数计算每个字符在指定索引处出现的次数(例如,如果索引为 4,该函数将查看每个字符串的第五个字符)。您可以假设索引值始终落在 0-(字符串长度 - 1)范围内,包括在内。创建一个字典,其中每个键都是小写字母;每个键的值是在指定位置具有该字母的字符串的数量。返回刚刚生成的字母频率字典
  • 如果你能用我的其他方式做,那将非常有帮助
【解决方案2】:

工作 zip 功能:

for t in zip('123','456','789'):
  print(t)

在上面的示例中,zip 将 3 个字符串作为参数。

第一次迭代:当第一次“for”工作时,zip 优先 每三个字符串中的元素并将其作为元组返回 => ('1', '4', '7')

第二次迭代 zip 返回 = > ('2', '5', '8')

第三次迭代 zip 返回 => ('3', '6', '9')

for t in zip('123','456','789'):
  print(t)



('1', '4', '7')
('2', '5', '8')
('3', '6', '9')

回答您的问题

s = ['hello','hullo','zeros']

*s => will unpack the list into 3 items. 

zip(*s) => zip('hello','hullo','zeros')

for t in zip(*s):

('h', 'h', 'z')
('e', 'u', 'e')
('l', 'l', 'r')
('l', 'l', 'o')
('o', 'o', 's')

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 2011-01-15
    • 2019-07-09
    • 1970-01-01
    • 2017-04-20
    • 2019-06-04
    • 2016-11-04
    相关资源
    最近更新 更多