Python - 从第二个列表中元素的末尾“减去”1个列表中的元素。元素是字符串而不是整数

时间:2013-10-08 20:21:04

标签: python list list-comprehension

我是python /编程新手。使用python 2.7

我一直在试图弄清楚如何从另一个列表中的元素中“减去”1个列表中的元素。但是我在引号中加上'减法',因为我没有使用整数,也没想到另一种解释方法。

首先,这是我的代码:

plural_string = "cell phones|sheep|oxen" # result of user input with raw_input()
plural_endings_string = "s,,en"                   # result of user input with raw_input() - always comma separated.  
plural_list = plural_string.split('|')
plural_endings_list = plural_endings_string.split(',')

# This is pseudo code since '-' does not work with non-integers in a string
# but it expresses what I am trying to achieve
new_list = [a - b for a, b in zip(plural_list, plural_endings_list)] 

所以,我真正希望新列表看起来像这样:

>>> new_list
>>> ['cell phone', 'sheep', 'ox']

我基本上想要使用plural_list变量中的复数结尾(元素)对plural_endings_list变量中的单词(元素)进行去复数。

需要注意的一个重要事项是:列表中的元素数量(以及字词选择)将根据用户输入(我)而有所不同。因此,在不同的情况下,我正在使用的列表可能如下所示:

plural_list = ['children', 'brothers', 'fish', 'penguins']
plural_endings_list = ['ren', 's', '', 's']

我试图弄清楚如何使用字符串 - 而不是列表 - 使用'.replace'函数,但我遇到了一堵砖墙,因为我不知道用户的输入是什么在每次运行脚本时。我找不到“一刀切”的解决方案。也没有成功尝试正则表达式,并且有同样的问题,不知道用户输入将是什么。现在它超出了我的新手大脑。

希望我已经清楚地解释了自己!如果不是,我试图在SO中与另一个问题相反 - How do i add two lists' elements into one list? 但是,我不需要连接,而是需要“减法”

干杯 达伦

EDIT1:回应@brad评论。我实际上通过用户输入将多个结尾输入plural_endings_list(这是更大脚本的一部分)。因此,如果列表包含元素"children's",那么我会选择"'s"作为plural_endings_list的结尾。它总是具体案例。

EDIT2:回应@Graeme Stuart的评论。格雷姆 - 输入的长度总是不同的。每个列表中可以有2个元素,或者每个列表中可以有10个元素,或者介于两者之间。

3 个答案:

答案 0 :(得分:1)

>>> p = 'children'
>>> e = 'ren'
>>> if p.endswith(e):
...   print p[:-len(e)]
... 
child

答案 1 :(得分:1)

我认为这可以满足您的需求。虽然它有点笨拙。你的输入总是一样长吗?

def depluralise(plurals, plural_endings):
    new_list = []
    for plural, plural_ending in zip(plurals, plural_endings):
        if plural.endswith(plural_ending):
            if plural_ending == '':
                new_list.append(plural)
            else:
                new_list.append(plural[:-len(plural_ending)])
    return new_list 


plural_string = "cell phones|sheep|oxen"
plurals = plural_string.split('|')
plural_endings_string = "s,,en"
plural_endings = plural_endings_string.split(',')

print depluralise(plurals, plural_endings)

plurals = ['children', 'brothers', 'fish', 'penguins']
plural_endings = ['ren', 's', '', 's']

print depluralise(plurals, plural_endings)

答案 2 :(得分:0)

这可能不是你想要的答案,但为了获得最佳的去复数化,你需要一本名词及其复数词典。

搜索复数,并用单数替换。

我认为你这样做会减少头发,而不是试图处理你遇到的所有例外情况:

  • 妇女
  • 现象
  • 数据
  • 骰子
  • ...