【问题标题】:Split and take n words from the end从末尾拆分并取 n 个单词
【发布时间】:2011-01-24 14:53:22
【问题描述】:

你将如何从分割行中取出最后 n 个结束词?例如我有这些行:

1. 123.by2.gateway.edge.messenger.live.com
2. messenger.com
3. 10.17.123.45
4. 126.by2.gateway.edge.messenger.live.com
5. 14.messenger.live.com

我想从地址中取出最后 3 个单词,这样对于第 1、4 和 5 行,我有 'messenger.live.com' 并且第 2 和 3 行保持不变。这是我为实现它所做的,但似乎很蹩脚:

link = line.split('.') 
if len(link) > 4: # to bypass the IP address
    plink = link[-1:-3] ?

【问题讨论】:

  • 第 5 行拆分后将有 4 个元素。

标签: python list slice


【解决方案1】:

你要带

plink = link[-3:]

要忽略数字 IP,您可以使用:

link = line.split('.')
if len(link) > 3 and link[-1].isalpha():
    plink = link[-3:]

这将忽略 2. 和 3.,同时正确处理 5.(正如 SilentGhost 正确指出的那样,您的代码会忽略 5.)

【讨论】:

  • 在我将行:group.setdefault(plink,dict()).setdefault(host, 0) 添加到上面的代码之后,它给出了错误消息:TypeError: unhashable type: 'list' .这是为什么呢?
  • @Adia - 您不能将列表用作字典键。先转换成tuple(link)或者'.'.join(link)-string。
  • 将链接转换为元组后,它显示:'AttributeError: 'NoneType' object has no attribute 'split''。
  • @Adia - 抱歉,请使用 plink,而不是 link
  • 其实我也是这样做的:plink = tuple(link[-3:]),仍然给''NoneType'对象没有属性'split''。
猜你喜欢
  • 2020-06-22
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
相关资源
最近更新 更多