python - 第一个 while 循环迭代,但不改变第二个循环内的值
问题描述
我正在尝试使用嵌套循环从我拥有的 .tsv 文件中删除某些行。我要删除的所有行都以 MD# 开头,我正在尝试使用 while 循环来迭代数字。
第一次使用数字“MD1”时,包含该数字的所有 10 行作为该行的第一个字符串都将被删除,但之后 MD2、MD3 等则不会。
由于我对 Python 仍然有些生疏,我设置了一个非常粗略的 if 语句来删除这些行,尽管它不是世界上最漂亮的代码,但它仍然有效。
包括的是数据外观的示例,4 列宽,320 行
[['MD1', 'Liverpool', 'Draw', 'Norwich'],
['Google', '0.85', '0.10', '0.05'],
['Bookies', '0.14', '7.00', '25.00'],
['Outcome', '11.43', '80.00', '260.00'],
['MD1', 'West Ham', 'Draw', 'Man. City'],
['Google', '0.09', '0.17', '0.74'],
['Bookies', '12.00', '5.00', '0.25'],
['Outcome', '130.00', '60.00', '12.50'],
['MD1', 'Crystal Palace', 'Draw', 'Everton'],
['Google', '0.30', '0.30', '0.40'],
['Bookies', '2.10', '2.20', '1.38'],
['Outcome', '31.00', '32.00', '23.75'],
['MD1', 'Burnley', 'Draw', 'Southhampton'],
['Google', '0.35', '0.31', '0.34'],
['Bookies', '1.63', '2.20', '1.75'],
['Outcome', '26.25', '32.00', '27.50'],
import csv
import numpy as np
data_list = []
with open('Sheet7.tsv',newline = '') as data:
data_reader = csv.reader(data, delimiter = '\t')
for data in data_reader:
data_list.append((data))
datamod = np.array([])
datamod = data_list
games = 8
i = 0
g = 1
while g <= games:
MDg = ('MD'+str(g))
g +=1
while i < len(datamod):
if datamod[i][0] == MDg:
datamod = np.delete(datamod, i, axis = 0)
i +=1
else:
i +=1
使用的替代代码
while i < len(datamod):
if datamod[i][0] == 'MD1':
datamod = np.delete(datamod, i, axis = 0)
if datamod[i][0] == 'MD2':
datamod = np.delete(datamod, i, axis = 0)
if datamod[i][0] == 'MD3':
datamod = np.delete(datamod, i, axis = 0)
if datamod[i][0] == 'MD4':
datamod = np.delete(datamod, i, axis = 0)
if datamod[i][0] == 'MD5':
datamod = np.delete(datamod, i, axis = 0)
if datamod[i][0] == 'MD6':
datamod = np.delete(datamod, i, axis = 0)
if datamod[i][0] == 'MD7':
datamod = np.delete(datamod, i, axis = 0)
if datamod[i][0] == 'MD8':
datamod = np.delete(datamod, i, axis = 0)
i += 1
所以我希望结果不是每 4 行都有,因此是一个包含 240 行而不是原来的 320 行的列表
如果有人可以帮助我,将不胜感激:)
解决方案
复制太多,可以进一步推广。如果您不需要后面的数字MD
进行任何比较,只需立即省略看起来像这样的行。
以下代码将所有数据加载到列表中,同时检查第一个数据字段是否匹配^MD\d+$
,这意味着以一个或多个数字开头,MD
没有任何额外的尾随字符:
import csv
import re
with open('Sheet7.tsv', newline='') as infile:
reader = csv.reader(infile, delimiter='\t')
data = [
line for line in reader
if not re.match('^MD\d+$', line[0].strip())
]
然后,您的结果列表将存储在data
变量中,并应准备好进行进一步计算。
推荐阅读
- python - 我需要更快的方法来优化我的循环
- tensorflow - 何时使用 tf.Variable 与 TensorArray
- kubernetes - 为什么 Kubernetes DNS 中没有注册 Pod 名称?
- wordpress - Gridsome条件模板生成
- c# - 如何使用 C# 从 XML API 获取数据
- sql-server - 尝试使用 SQL 枢轴创建行列
- if-statement - Configmap 中的 Kubernetes If/Or 语句
- postgresql - DataGrip 图:从箭头中删除标签?
- sql - 在 PSQL 中编辑连接/连接表结果的结果
- javascript - 如何使用 setinterval 更改多个元素 innerHTML?