Python 对for循环中字符串列表中的子字符串应用多个if和elif语句

Python 对for循环中字符串列表中的子字符串应用多个if和elif语句,python,string,if-statement,for-loop,substring,Python,String,If Statement,For Loop,Substring,我有一个电子表格,在列(C1:C3159)中填充了杂乱无章的开放文本字段,我想按文本中的各种关键字进行排序。我试图编写一段python代码,循环遍历该列,查找关键字,并根据文本中的单词将该单元格中字符串的类别附加到空列表中。到目前为止,我的代码是这样的 ## make an object attr for the column attr = ['C1:C3159'] ## make all lower case [x.lower() for x in attr] ## initializ

我有一个电子表格,在列(C1:C3159)中填充了杂乱无章的开放文本字段,我想按文本中的各种关键字进行排序。我试图编写一段python代码,循环遍历该列,查找关键字,并根据文本中的单词将该单元格中字符串的类别附加到空列表中。到目前为止,我的代码是这样的

## make an object attr for the column    
attr = ['C1:C3159']
## make all lower case
[x.lower() for x in attr]
## initialize an empty list
categories = []
## loop through attr object and append categories to the "categories" list
for i in attr:
    if 'pest' or 'weed' or 'disease' or 'cide' or 'incid' or 'trap'/
    or 'virus' or 'IPM' or 'blight' or 'incid' or 'rot' or 'suck' in i:
        categories.append("pest management")

    elif 'fert' or 'dap' or 'urea' or 'manga' or 'npk' pr 'inm' in i:
        categories.append("fertilizer")

    elif 'wind' or 'rain' or 'irr' or 'alt' or 'moist' or 'soil' or 'ph'\
    or 'drip'or 'environ' or 'ec' in i:
        categories.append("environment")

    elif 'spac' or 'name' or 'stor' or 'yield' or 'rogu' or 'maint'\
    or 'cond' or 'prod' or 'fenc' or 'child' or 'row' or 'prun' or 'hoe'\
    or 'weight' or 'prep' or 'plot' or 'pull' or 'topp' in i:
        categories.append("operations")

    elif 'plant' or 'germin' or 'age' or 'bulk' or 'buds'  or 'matur'\
    or 'harvest' or 'surviv' or 'health' or 'height' or 'grow' in i:
        categories.append("life cycle")

    elif 'price' or 'sold' or 'inr' or 'cost' in i:
        categories.append("market")

    elif 'shed' or 'post' or 'fenc' or 'pond' or 'stor' in i:
        categories.append("PPE")

    else:
        categories.append("uncategorized")
我遇到的问题是,在第一个if语句之后,循环中没有对elif语句进行求值,而我返回的列表只包含为数不多的被归类为“害虫管理”的内容。有人知道如何执行我在这里尝试执行的操作,以便对整个循环进行求值吗?下面是列表中字符串的一个小样本

attr = ['Age of plantation',
'Altitude of Plantation',
'Annual production Last year (In Kg)',
'Average Price paid per kg in NPR (Last Year)',
'Majority Bush type',
'Pruning Cycle',
'Tea sold to ( Last Year)',
'Boll weight in grams',
'CLCuV incidence %',
'Dibbles per row',
'Gap Filling',
'Germination %',
'Hoeing',
'Land preparation',
'Land preparation date',
'Pest & disease incidence',
'Plot size in metre Square',
'Rows per entry',
'Spacing between plants in cms']

修改

您必须使用中的
检查if情况下的所有字符串

if 'pest' in i or 'weed' in i or 'disease' in i or 'cide' in i or 'incid' in i or 'trap' in i  or 'virus' in i or 'IPM' in i or 'blight' in i or 'incid' in i or 'rot' in i or 'suck' in i:
由于
if'pest'或

python中的

如果语句中只有
用于检查它是否为空字符串。如果它是空字符串,则返回
False
,否则返回
True
。由于此属性,您的
If
大小写匹配

if "sad":
    print "Why!"
output: Why!

if "":
    print "Why!"
output:         

如果语句未评估elif语句


如果elif
语句相互排斥。如果您希望在第一个
If
之后计算其他
If
条件,请将每条语句放入
If
中,而不是
elif

中,我将使用regex进行此操作

很多人认为,如果你用正则表达式解决一个问题,你最终会遇到两个问题,但我相信如果你做得干净,你可以避免这种困境

import re

pestmanagementattributes = [
    'pest', 'weed', 'disease', 'cide', 'incid', 'trap',
    'virus', 'IPM', 'blight', 'incid', 'rot', 'suck'
]
r_pestmanagement = re.compile(".*" + (".*|.*".join(pestmanagementattributes)) + ".*")

fertilizerattributes = ['fert', 'dap', 'urea', 'manga', 'npk', 'inm']
r_fertilizer = re.compile(".*" + (".*|.*".join(fertilizerattributes)) + ".*")

for i in attr:
    if r_pestmanagement.match(i):
        categories.append("pest management")
    elif r_fertilizer.match(i):
        categories.append("fertilizer")
...
    else:
        categories.append("uncategorized")

由于字符串
i
在每个类别中只扫描一次,而不是每个单词扫描一次,因此执行此操作的速度也应该快得多。

感谢您的编辑。stackoverflow中的新手格式化是一个需要克服的不必要的棘手障碍。我现在有足够的代表发布相关数据的图像,所以这是一个加号!