在字符串中搜索可变的值

时间:2014-10-17 07:09:02

标签: python

想象一下,你有100个随机数字的字符串,类似的东西:

str1="123"
str2="456"
str3="287"
strN="..."

我想准确显示哪个字符串包含数字" 2"。

例如输出将是:

"Digit 2 is in str1 str3"

对于str range = 4:

    str1 = "123"
    str2 = "456"
    str3 = "728"
    start = 0

    list = []
    while start < 4:
        b = "str%d" %start
        list.append(b)
        start+=1

    # List is ['str0', 'str1', 'str2', 'str3']

    for i in list:
        if "2" in i:
            print i 

我想知道如何从列表中分配元素,例如"str1"作为变量str1,内容为"123"

2 个答案:

答案 0 :(得分:2)

确切答案,但错误概念:

search_value = '2'

str1 = "123"
str2 = "456"
str3 = "728"
start = 1

list = []
while start < 4:
    b = "str%d" % start
    list.append(b)
    start += 1

for value_name in list:
    if search_value in eval(value_name):
        print "{0} is in {1}".format(search_value, value_name)

输出:

2 is in str1
2 is in str3

此处使用eval。在大多数情况下,不应该使用它,因为它很危险。此外,如果您需要通过名称访问变量,那么最好更改代码策略。

此外,list不是变量的好名称,因为list是内置的python函数。

所以,你最好把字符串放在dict中并更改一些变量名。

另一个答案,概念:

strings = {
    "str1": "123",
    "str2": "456",
    "str3": "728",
}
search_value = '2'

for s_name in sorted(strings):
    if search_value in strings[s_name]:
        print "{0} is in {1}".format(search_value, s_name)

如您所见,它更紧凑,更易读。输出将是相同的。

答案 1 :(得分:1)

一种方式可能是这样的:

data = {'str1': str1, 'str2': str2, 'str3': str3}
dict = {key: value for (key, value) in data.iteritems() if '2' in value}

然后你列出你的strn变量及其正确的内容。

您可以使用

按名称访问变量
globals()['str1'] <==> globals()[dict.keys()[0]]