获取列表中具有特定子字符串

时间:2015-09-09 07:58:01

标签: python list substring

所以我正在建立一个股票查找项目的东西,我正在寻找包含全名子字符串的股票名称的股票代码。

例如,将Apple作为stockName传递将返回AAPL,因为Apple是Apple,Inc。的子串。对于Microsoft或Micros返回MSFT也是如此,因为Microsoft或Micros是Microsoft Corporation的子串。

这是我现有的代码,如果我输入子字符串,则返回错误:

def getStockTicker(stockName):
    return companyTickers[companyNames.index(stockName)]

有没有人有任何想法?

编辑:我已处理错误,因此如果在companyNames中找不到任何内容,则返回ValueError

3 个答案:

答案 0 :(得分:2)

我认为两个单独的名单,一个公司名称和一个公司股票代码,不是正确的数据结构。

您熟悉Python dict吗?它将键映射到值。如果您使用公司名称作为密钥并使用股票代码作为值,则声明dict将如下所示:

companies = {
    'Apple, Inc.': 'AAPL',
    'Microsoft Corporation': 'MSFT'
}

使用整个名称检索给定的股票代码符号如下:

companies['Apple, Inc.']  # returns 'AAPL'

至于根据子串检索代码,它是完全可行的。需要注意的一件事是:相同的子字符串可能匹配多个键,因此您希望返回可能匹配的列表,而不是第一个可能的匹配。

companies = {...}

def get_ticker_symbol(company):
    return [value for key, value in companies.items() if company in key]

答案 1 :(得分:0)

stockName会告诉您someFullStringstockName的子字符串。

鉴于此,您可以创建一个仅包含def getStockTicker(stockName): for fullString in (s for s in companyNames if stockName in s): return companyTickers[companyNames.index(fullString)] # at this point, stockName is not a substring of anything in compagnyNames return None # or raise an exception, or whatever 是其子串的字符串的生成器,并检索第一个的索引(如果有):

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

答案 2 :(得分:0)

除了迭代companyNames并检查它是否包含stockName之外别无他法。

def getStockTicker(stockName):
    for index, companyName in enumerate(companyNames):
        if stockName in companyName: 
            return companyTickers[index]