根据字符串中的第一个字符查找字符串列表中第一次出现的元素

问题描述:

我是python的新手。我正在尝试获取一系列字符串中的第一个数字,这些字符串是以一个常见数字开头的一系列数字。根据字符串中的第一个字符查找字符串列表中第一次出现的元素

例如:

x = ['512','345','321','345','674','132','231','145','214','576'] 

我的预期输出:

result = ['512','345','674','132','231'] 

即说,例如,在所有的数字开始在列表1中,我应该得到的第一位数字同样对于所有其他号码。

我可以使用循环两次来得到它。但我想知道有没有更好的方法来做到这一点。

注意:该列表是一个字符串列表,其中给出的数字只是一个例子。

+0

你能解释为什么你的预期产出是你所期望的吗?我不明白你想要创建什么算法。显示到目前为止您的代码,并指出它是否有效(如果没有,它是如何失败)也会有所帮助。 – dcrosta

+0

你的英语在这里很差,不完全确定你想要什么。 –

+0

我正在尝试打印每个子列表的第一个数字。例如,列表包含1到1000之间的数字,所有小于100的数字是一个子列表,数字小于200是子列表。我可以将列表分成子列表并执行此操作。但我想只用一个列表来完成。 – newbie

您可以使用生成器函数来执行此操作。在函数中,您只需迭代初始列表和每个元素,检查是否有另一个元素以字符串的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