从列表中的单个元素中减去?

时间:2016-01-08 22:48:47

标签: python

我是Python的新手,了解它是如何工作的这是我制作的一个程序,我似乎无法减少数量

如何从列表中的单个元素中减去特定数字?

    import csv
    stockfile = open("Stock list.txt")
    csvf = csv.reader(stockfile,delimiter = ",")
    #Sets csvf vaiable to open text file
    #Delimiter is what seperates your values

    code = []
    item = []
    price = []
    quantity = []
    quantity = list(map(int, quantity))


    for row in csvf:
    code.append(row[0])
    item.append(row[1])
    price.append(row[2])
    quantity.append(row[3])

    usersearch = input("Please enter a 7-digit code: ")
    #Asks the user to enter the unique item codes
    while usersearch not in code:   
    print("This is not a valid 7-digit code")
    usersearch = input("Please enter a 7-digit code: ")
        if usersearch in code:               
        print("The code has been found")
        index = code.index(usersearch)  
        print("The item you have chosen is: %s"%item[index])   
        print("The price is: £%s"%price[index])                 
        print("There are %s left in stock"%quantity[index])
        quantity[index] -= 1

我想将数量[index]减少1

当我使用quantity[index] -= 1时出现错误:

TypeError: - =''str'和'int'

不支持的操作数类型

这些是文件的内容:

0000001,PS4,300,50

0000011,Xbox One,300,50

<00> 0000111,极品飞车,40,20

0001111,正当理由3,45,24

0011111,Dualshock 4,48,30

没关系我弄明白,quantity=list(map(int, quantity))必须在quantity[index] -= 1

之前来

2 个答案:

答案 0 :(得分:5)

您可以使用扩充作业-=

a[4] -= 3

或者只是将减法的结果重新分配回索引(无论如何-=都是这样做):

a[4] = a[4] - 3

答案 1 :(得分:1)

Python有一个强烈的“名字”概念。使用您的示例:

a = [12,34,43,21,11]

a是一个'名称',指向一个包含五个数字的列表,或者更一般地说,a指向内存中某些数据被保存的位置 - 在这种情况下是阵列。当您“编入”列表时,实际上,您使用的名称更具体。因此,名称a[4]指向内存中保存整数的位置11

所以当你这样做时:

a[4] = "bob"

您说'将名称a[4]指向的内存中的位置更改为“bob”'。当你这样做时:

a[4] = a[4] - 3

您说'更改名称a[4]指向的内存中的位置,并将其更改为以下评估的结果:a[4] - 3。该评估首先查看a[4]中已有的内容,然后减去三个。在这种情况下,8将结果分配给a[4]引用的内存中的位置。

请注意,使用名称“获取特定”取决于原始名称的“数据类型”。由于您的a是一个列表,Python知道如何索引它。这是Python(在REPL中)尝试索引到一些其他常见类型:

>>> s = "abcde"
>>> s[4]
'e'
>>> b = 5
>>> b[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable
>>> c = { 'a':1, 'b':2, 'c':3, 'd':4, 'e':5 }
>>> c[4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 4
>>> c['d']
4

请注意,在最后一个中,密钥d有效但4没有。当你想要了解你正在做的事情时,重要的是要知道你正在索引的内容!