我是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个元素,或者介于两者之间。
答案 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)
这可能不是你想要的答案,但为了获得最佳的去复数化,你需要一本名词及其复数词典。
搜索复数,并用单数替换。
我认为你这样做会减少头发,而不是试图处理你遇到的所有例外情况: