Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用新数字替换列表中的旧数字并创建新数组_Python_Arrays_Excel_If Statement_For Loop - Fatal编程技术网

Python 用新数字替换列表中的旧数字并创建新数组

Python 用新数字替换列表中的旧数字并创建新数组,python,arrays,excel,if-statement,for-loop,Python,Arrays,Excel,If Statement,For Loop,我正在为旁边有“add10”的值获取所有新值。如何创建一个数组,用新的值替换旁边有“add10”的值 最初从excel文件中提取ColB打印: import xlrd fileWorkspace = '/Users/Bob/Desktop/' wb1 = xlrd.open_workbook(fileWorkspace + 'Book1.xlsx') sh1 = wb1.sheet_by_index(0) colA,colB,colC,colD = [],[],[],[] for a in

我正在为旁边有“add10”的值获取所有新值。如何创建一个数组,用新的值替换旁边有“add10”的值

最初从excel文件中提取ColB打印:

import xlrd
fileWorkspace = '/Users/Bob/Desktop/'

wb1 = xlrd.open_workbook(fileWorkspace + 'Book1.xlsx')
sh1 = wb1.sheet_by_index(0)

colA,colB,colC,colD = [],[],[],[]
for a in range(3,sh1.nrows):
    colA.append(int(sh1.cell(a,0).value))
    colB.append(float(sh1.cell(a,1).value))
    colC.append(str(sh1.cell(a,2).value))
    colD.append(str(sh1.cell(a,3).value))
print(colA)
print(colB)   # Need to add 10 if indicated
print(colC)
print(colD)   # Adding 10 is indicated by "add10" 
print('\n')

update_colB_values = []
for i in range(3,sh1.nrows):    
    if sh1.cell(i,3).value == "add10":
        add = (sh1.cell(i,1).value) + 10
        update_colB_values.append(add)
print(update_colB_values)
更新后,我希望有一个列表更新列表,因为10.0已添加到列表中。因此,新colB应该是:

[32.0, 5.0, 12.0, 1.0, 87.0, 9.0]  # This is fine
截至目前,整体产量为:

[42.0, 15.0, 12.0, 1.0, 87.0, 19.0]   # new_colB. This is what I want after the update.
Excel文件图像:

现在,您只需将已更改的值添加到更新列表中。相反,您希望附加所有值,同时更新需要添加到的值。这是一个使用现有列和列表的表单:

[0, 1, 2, 3, 4, 5]
[32.0, 5.0, 12.0, 1.0, 87.0, 9.0]
['', '', '', '', '', '']
['add10', 'add10', '', '', '', 'add10']


[42.0, 15.0, 19.0] 
您应该能够用此行替换您的实例化和
for
循环

应该注意的是,内置的
zip
是一个非常有用的函数,您可以在以前的代码中使用它。例如,它的基本行为是“转换”二维列表

colB = [32.0, 5.0, 12.0, 1.0, 87.0, 9.0]
colD = ['add10', 'add10', '', '', '', 'add10']

update_colB_values = [B + 10 if D == 'add10' else B for B, D in zip(colB, colD)]
# [42.0, 15.0, 12.0, 1.0, 87.0, 19.0]
函数
zip
接受任意数量的位置参数,并将所有
ith
元素匹配在一起。一旦其中一行用完,迭代就结束了,因此如果您想填充,来自
itertools
zip_longest
(Python 3)或
izip_longest
(Python 2)非常有用

要使用现有代码执行此操作,可以添加
else
语句,以便包含不需要添加10的元素

matrix = [['a1', 'a2', 'a3'],
          ['b1', 'b2', 'b3'],
          ['c1', 'c2', 'c3']]

for row in zip(*matrix):
    print(list(row))

# ['a1', 'b1', 'c1']
# ['a2', 'b2', 'c2']
# ['a3', 'b3', 'c3']

这一行代码完成了任务,但是有没有一种方法可以不用zip来完成它,因为我从未使用过它,我只想使用for循环和if语句。
update_colB_values = []
for i in range(3,sh1.nrows):    
    if sh1.cell(i,3).value == "add10":
        add = (sh1.cell(i,1).value) + 10
        update_colB_values.append(add)
    else:                                    # add
        value = sh1.cell(i,1).value          # these
        update_colB_values.append(value)     # lines