如何在python列表中查找特定字符串,如果找到,则打印位置,否则打印0

时间:2018-09-28 22:49:53

标签: python string python-3.x

input_String = str(input()) # Input is comma separated word
cargo_status = str(input()) # String to look into input string

list = input_String.split(",")
i = 0
length = len(list)
print(length)
for x in list:
    if x == cargo_status:
        i=i+1
        print(i)
    elif (not cargo_status in x) and (i==length):
        print(0)

输入:

In:Packed,InTransit,Packed,Shipped,Out-For-Delivery,Shipped,Delivered
In:Packed

输出:

1
3

问题:如果未找到要比较的字符串,则代码不会打印0,否则我将得到所需的输出。 非常感谢您的帮助,因为我是学习Python或编程语言的新手。

4 个答案:

答案 0 :(得分:1)

您应将PS C:\Users\me> 'a', 'b' | foo The file is: a The file is: b PS C:\Users\me> foo -File 'a' The file is: a 移至条件之外。

也许您想写i = i + 1

无论如何,这并不高效。这是一个选项:

not cargo_status in list

答案 1 :(得分:1)

可以在此处使用枚举分割

s = 'Packed,InTransit,Packed,Shipped,Out-For-Delivery,Shipped,Delivered'
search = 'Packed'

print(*[idx if search in item else 0 for idx, item in enumerate(s.split(','), start = 1)])
1 0 3 0 0 0 0

扩展循环

for idx, item in enumerate(s.split(','), start = 1):
    if search in item:
        print(idx)
    else:
        print(0)
1
0
3
0
0
0
0

答案 2 :(得分:0)

对于常规Python,您可以将enumerateif / else子句一起使用。

如果您愿意使用第三方库,则可以通过NumPy和布尔索引建立一个有趣的替代方法:

import numpy as np

L = np.array(s.split(','))
A = np.arange(1, len(L)+1)
A[L != search] = 0

print(A)

array([1, 0, 3, 0, 0, 0, 0])

答案 3 :(得分:0)

这里的功能可以实现您提出的问题。 但是,尝试构建仅查询一次字典的字典会非常浪费,因此,如果查询的次数比读取comma_separate_string的次数更多,请使用它。

def find_position(comma_sep_string, lookup_keyword):
    d = dict()
    _list = comma_sep_string.split(',')
    for index, element in enumerate(_list,1):
        try:
            d[element].append(index)
        except KeyError:
            d[element] = [index]

    return d.get(lookup_keyword, 0)

示例输出:

In [11]: find_position("Python,Python,Java,Haskell", 'Python')                                                       
Out[11]: [1, 2]

In [12]: find_position("Python,Python,Java,Haskell", 'Pytho')                                                        
Out[12]: 0

注意:如果找不到字符串,则错过了打印0的要求。 实现此目的的一种方法是通过defaultdict

l = "Packed,InTransit,Packed,Shipped,Out-For-Delivery,Shipped,Delivered".split(',')
from collections import defaultdict                         
d = defaultdict(list)
for i,e in enumerate(l,1):
    d[e].append(i)

在ipython上运行上述脚本的示例:

In [6]: d                                                                                                            
Out[6]: 
defaultdict(list,
        {'Packed': [0, 2],
         'InTransit': [1],
         'Shipped': [3, 5],
         'Out-For-Delivery': [4],
         'Delivered': [6]})


In [7]: d['Packed']                                                                                                  
Out[7]: [0, 2]