用新数字替换列表中的旧数字并创建新数组
问题描述:
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)
我正在为其旁边具有“add10”的值获取所有新值。我如何创建一个数组来替换那些新增加的“add10”值的数组?用新数字替换列表中的旧数字并创建新数组
最初从Excel文件COLB打印拉:
[32.0, 5.0, 12.0, 1.0, 87.0, 9.0] # This is fine
更新后,我希望有,因为10.0已添加到他们更新列表清单。因此,新的COLB应该是:
[42.0, 15.0, 12.0, 1.0, 87.0, 19.0] # new_colB. This is what I want after the update.
整个输出截至目前:
[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]
Excel文件图像: Excel File
答
现在你只追加值更新已更改的列表。相反,您想要追加所有值,同时更新需要添加的值。下面是使用现有的列与列表理解的一种形式:
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]
你应该能够取代你的实例化和for
循环这条线。
应该注意的是,内置的zip
是一个非常有用的功能,您可以在以前的代码中使用它。例如,它的基本行为是“转移”2D列表。
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
需要的位置参数的任意数量的和所有的ith
元件匹配在一起。只要其中一行耗尽,迭代结束,因此如果您想要填充,zip_longest
(Python 3)或izip_longest
(Python 2)itertools
会很有用。
要使用您现有的代码执行此操作,您可以添加else
语句,以便包含不需要添加到中的元素。
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
无效的语法是我得到 – Bob
@Bob更新,可测试的例子 –
这一行代码做了工作的那部分的错误,但有没有办法做到这一点没有拉链,因为我从来没用过它,我只想坚持for循环和if语句。 – Bob