根据字符串中的第一个字符查找字符串列表中第一次出现的元素
问题描述:
我是python的新手。我正在尝试获取一系列字符串中的第一个数字,这些字符串是以一个常见数字开头的一系列数字。根据字符串中的第一个字符查找字符串列表中第一次出现的元素
例如:
x = ['512','345','321','345','674','132','231','145','214','576']
我的预期输出:
result = ['512','345','674','132','231']
即说,例如,在所有的数字开始在列表1中,我应该得到的第一位数字同样对于所有其他号码。
我可以使用循环两次来得到它。但我想知道有没有更好的方法来做到这一点。
注意:该列表是一个字符串列表,其中给出的数字只是一个例子。
答
您可以使用生成器函数来执行此操作。在函数中,您只需迭代初始列表和每个元素,检查是否有另一个元素以字符串的set
中已存在的相同字符开头。如果找不到匹配,则只需yield
那个元素。
>>> def get_num(lst):
... found = set()
... for element in lst:
... if not any(item.startswith(element[0]) for item in found):
... found.add(element)
... yield element
...
>>> x = ['512','345','321','345','674','132','231','145','214','576']
>>> list(get_num(x))
['512', '345', '674', '132', '231']
+0
工作完美(Y) – newbie
你能解释为什么你的预期产出是你所期望的吗?我不明白你想要创建什么算法。显示到目前为止您的代码,并指出它是否有效(如果没有,它是如何失败)也会有所帮助。 – dcrosta
你的英语在这里很差,不完全确定你想要什么。 –
我正在尝试打印每个子列表的第一个数字。例如,列表包含1到1000之间的数字,所有小于100的数字是一个子列表,数字小于200是子列表。我可以将列表分成子列表并执行此操作。但我想只用一个列表来完成。 – newbie