在python中使用带有变量字符串的条件

时间:2012-03-28 17:32:51

标签: python variables if-statement conditional

我对python很新,但我认为我很快就赶上了。

无论如何,我正在制作一个节目(不是为了上课,而是为了帮助我),并且遇到了一个问题。

我正在尝试记录一系列事物,而且我的意思是接近千种,有些重复。所以我的问题是:

我不想在列表中添加冗余名称,而是我想在之前(或之后,以较简单的方式)添加2x或3x,然后将其写入txt文档。

我对文本文档的阅读和写作很好,但我唯一的问题是条件语句,我不知道如何编写它,也不能在网上找到它。

for lines in list_of_things:
   if(lines=="XXXX x (name of object here)"):

然后if语句下的任何内容。我唯一的问题是“XXXX”可以替换为任何字符串编号,但我不知道如何在字符串中包含变量,如果这有意义的话。即使它变成了int,我仍然不知道如何在条件中使用变量。

我唯一能想到的就是制作多个if语句,这些语句真的很长。

有什么建议吗?我为文本墙道歉。

6 个答案:

答案 0 :(得分:5)

我建议循环输入文件中的行并在每个找到的字典中插入一个字典中的键,然后为此后找到的值的每个实例递增一个键的值,然后生成该字典的输出文件。

catalog = {}
for line in input_file:
    if line in catalog:
        catalog[line] += 1
    else:
        catalog[line] = 1

替代地

from collections import defaultdict
catalog = defaultdict(int)
for line in input_file:
    catalog[line] += 1

然后直接浏览该dict并将其打印到文件中。

答案 1 :(得分:1)

您可能正在寻找regular expressions

for line in text:
    match = re.match(r'(\d+) x (.*)', line)
    if match:
        count = int(match.group(1))
        object_name = match.group(2)
        ...

答案 2 :(得分:0)

这应该这样做:

a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
from itertools import groupby
print ["%dx %s" % (len(list(group)), key) for key, group in groupby(a)]

答案 3 :(得分:0)

这样的东西?

list_of_things=['XXXX 1', 'YYYY 1', 'ZZZZ 1', 'AAAA 1', 'ZZZZ 2']

for line in list_of_things:
    for e in ['ZZZZ','YYYY']:
        if e in line:
            print line

输出:

YYYY 1
ZZZZ 1
ZZZZ 2

你也可以使用if line.startswith(e):或正则表达式(如果我理解你的问题......)

答案 4 :(得分:0)

要在字符串中包含变量,请使用format()

>>> i = 123
>>> s = "This is an example {0}".format(i)
>>> s
'This is an example 123'

在这种情况下,{0}表示您要在其中放置变量。如果您有更多变量,请使用"This is an example {0} and more {1}".format(i, j)"(因此每个变量都有一个数字,从0开始)。

答案 5 :(得分:0)

有两种方法可以解决这个问题。 1)类似下面的内容使用字典来捕获项目的数量,然后使用列表来格式化每个项目的计数

list_of_things = ['sun', 'moon', 'green', 'grey', 'sun', 'grass', 'green']
listItemCount = {}
countedList = []
for lines in list_of_thing:
    if lines in listItemCount:
        listItemCount[lines] += 1
    else:
        listItemCount[lines] = 1
for id in listItemCount:
    if listItemCount[id] > 1:
        countedList.append(id+' - x'str(listItemCount[id]))
    else:
        countedList.append(id)
for item in countedList:
    print(item)

以上的输出将是

sun - x2
grass
green - x2
grey
moon

或2)使用集合使事情更简单,如下所示

import collections

list_of_things = ['sun', 'moon', 'green', 'grey', 'sun', 'grass', 'green']
listItemCount = collections.Counter(list_of_things)
listItemCountDict = dict(listItemCount)
countedList = []
for id in listItemCountDict:
    if listItemCountDict[id] > 1:
        countedList.append(id+' - x'str(listItemCountDict[id]))
    else:
        countedList.append(id)
for item in countedList:
    print(item)

以上的输出将是

sun - x2
grass
green - x2
grey
moon