您好,我正在学习使用Python编程来操作数据库,而我无法完成这项简单的任务。请有人帮助我。 我有这个清单
CIS=['4998200lp','2159140lp','02546or']
我想得到这个结果:
CIS=['4998200lp','2159140lp','2546or']
我正在尝试类似的事情:
for x in CIS:
izq= x[:1]
if izq == 0:
CIS=[x.replace(x[:1],'') for x in CIS]
print (CIS)
我只想删除条件izq == 0
的每个字符串的第一个元素。
答案 0 :(得分:1)
如果您只想删除每个字符串的第一个零,请使用startswith方法。另外,不要查找整数0.查找字符串' 0'。
最后,您可以通过理解来简化您的实施,并使用新数据创建新列表:
[w[1:] if w.startswith('0') else w for w in CIS]
输出:
['4998200lp', '2159140lp', '2546or']
答案 1 :(得分:1)
您的描述与您的示例输入/输出不符,后者也与您的代码不同。
根据示例输入/输出,我怀疑你要做的是从任何以0
开头的字符串中删除一个前导0
。这并不算太糟糕,但是如果没有要分配的索引,则无法在for
循环中执行此操作。为此,您可以使用enumerate
:
for i, x in enumerate(CIS):
if x.startswith('0'): # or x[:1] == '0' if you really prefer
CIS[i] = x[1:]
或者,您可以使用列表推导来替换CIS
:
CIS = [x[1:] if x.startswith('0') else x for x in CIS]
并进行变异(而不是制作新的list
),使用相同的理解但分配给整个切片,这使得它的行为类似于第一个示例中的拼写循环:
CIS[:] = [x[1:] if x.startswith('0') else x for x in CIS]
如果将CIS
作为参数传递给函数,或者在多个位置引用,则会出现示例#1 /#3和示例#2之间的差异。在#1 /#3中,它正在改变list
,所以所有引用都会看到更新,在#2中,它会重新分配CIS
,但保持原始list
不变;如果存在其他引用,它们将不会出现更改。
注意:如果目标是移除所有前导0
,请使用str.lstrip
,例如:
CIS = [x.lstrip('0') for x in CIS]
对其他方法进行了类似的调整。在这种情况下,您甚至不需要测试是否存在0
,因为如果lstrip
不以str
开头,0
会返回未修改的while ((inputLine = in.readLine()) != null) {
JSONParser jsonParser = new JSONParser();
JSONArray jsonArray = (JSONArray) jsonParser.parse(inputLine);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject object = (JSONObject) jsonArray.get(i);
String date = new java.sql.Timestamp(System.currentTimeMillis()).toString();
out.write(date.getBytes());
out.write(",".getBytes());
out.writeBytes((String) object.get("name"));
out.write(",".getBytes());
out.writeBytes((String) object.get("label"));
out.write(",".getBytes());
out.writeBytes(String.valueOf(object.get("value")));
//out.write(inputLine.getBytes());
out.write("\n".getBytes());
out.hflush();
}
。< / p>
答案 2 :(得分:0)
尝试删除以0
开头的每个元素的第一个字符:
CIS=['4998200lp','2159140lp','02546or']
for i,v in enumerate(CIS):
if v.startswith('0'):
CIS[i] = v[1:]
CIS # ['4998200lp', '2159140lp', '2546or']
答案 3 :(得分:0)
实际上,你的循环包含了一种非常接近工作解决方案的方法:
CIS=['4998200lp','2159140lp','02546or']
CIS=[x.replace(x[:1],'') for x in CIS]
但这会剥离所有第一个元素。要仅在'0'
(请注意与integer
:0
不同)时替换它们,您需要将if ... else ...
纳入列表理解:
CIS=['4998200lp','2159140lp','02546or']
CIS=[x.replace(x[:1],'',1) if x[:1] == '0' else x for x in CIS ]
if ... else ...
语法可能有点奇怪,但只是尝试大声读取代码:“如果第一个字符为零则插入替换的x,或者如果不插入x,则插入CIS中的每个x”。< / p>
其他答案包含更为复杂的方法,但我只是想添加这个答案,让您提醒您正确的方向!
但是如果for
循环遍历同一个iterable
,那么在<% @total_sales_volume.each do |record| %>
<%= record.transaction_date %>
<% end %>
循环中使用列表理解通常是个坏主意。大多数情况下,你只想要其中一个。