今天可能有点太多了......但是,好吧。
这个问题让我很困惑。此函数将字符串列表作为参数,并返回每个字符串,该字符串是其前面的字符串的子字符串。所以
请原谅这里乱七八糟的代码,我还在学习。
def findSubStrs(lst):
'list ==> list, return list of all strings that are substrings of their predecessor in lst'
res = []
for a in lst:
if len(int(a-1)) > len(lst):
res = res + [a]
return res
我认为len(int(a-1))可以检查前面的字符串,但我得到了错误消息“TypeError:forpport'和'int'的不支持的操作数类型”我发现唯一有效的结果是len(a)< 3或其他一些int,但这不会返回我需要的一切。
答案 0 :(得分:5)
您可以使用zip
来比对对象:
>>> s1 = ["hope", "hop", "hopefully", "test", "testing"]
>>> [b for a,b in zip(s1, s1[1:]) if b in a]
['hop']
>>> s2 = ["hopefully", "hope", "hop", "testing", "test"]
>>> [b for a,b in zip(s2, s2[1:]) if b in a]
['hope', 'hop', 'test']
至于你的代码:
res = []
for a in lst:
if len(int(a-1)) > len(lst):
res = res + [a]
return res
这将遍历lst
中的每个元素。 len(int(a-1))
将尝试从字符串中减去1,然后将结果转换为整数,然后取整数的长度,然后将该长度与列表len(lst)
的长度进行比较。那不是你想要的。 (另一个答案已经解释了使用循环和索引的正确方法,所以我会停止。)
答案 1 :(得分:2)
怎么回合
print [my_list[i] for i in range(1,len(my_list)) if my_list[i] in my_list[i-1]]
例如
>>> def findSubStrs(my_list):
... return [my_list[i] for i in range(1,len(my_list)) if my_list[i] in my_list[i-1]]
>>> findSubStrs(["hope", "hop", "hopefully", "test", "testing"] )
['hop']
>>> findSubStrs(["hopefully", "hope", "hop", "testing", "test"])
['hope', 'hop', 'test']
要做到这一点,没有列表理解,你可以使用一个简单的循环
for i in range(1,len(my_list)):
if my_list[i] in my_list[i-1]:
print my_list[i]