我想将输入分配到与len()
s相关的字段。问题是这些字段也有条件。
第1到第10个字段,允许&lt; 25个字符。第11至第20字段允许<100个字符。
我想要的是,以下代码采用user_input[i]
,检查len()
,以及len(user_input[i])
是否&lt; len()
25个字符,将其分配给第1个字段,然后移动到下一个输入;但是在检查import csv
import os
user_input = []
def getting_text(entered_text):
if entered_text == "done":
print "entering the texts are done!"
elif entered_text == "":
getting_text(raw_input("you've entered an empty text, please try again\n"))
else:
user_input.append(entered_text)
getting_text(raw_input("Enter the text or write done to finish entering\n"))
getting_text(raw_input("Enter the first text\n"))
with open("trial.csv", "w") as csvfile:
fieldnames = ["1st field", "2nd field", "3rd field", "4th field", "5th field", "6th field", "7th field", "8th field", "9th field", "10th field", "11th field", "12th field", "13th field", "14th field", "15th field", "16th field", "17th field", "18th field", "19th field", "20th field"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for i in range(0, len(user_input)):
writer.writerow({"1st field": user_input[i], "2nd field": "input will be here", "3rd field": "input will be here", "4th field": "input will be here", "5th field": "input will be here", "6th field": "input will be here"}) #and so on :)
os.startfile("trial.csv")
时也从第二个字段开始。
当输入的输入长度在25到100个字符之间时,应将其分配给第11-20个字段。就像上面一样,一旦第11个填满,它应该从第12个字段开始。
请注意我希望脚本检查&lt;首先是25条件。如果&lt;填充了25个字段,它可以将输入分配给&lt; 100输入。
下面的代码并不完整,远非真实,这就是我所能做到的:)
{{1}}
这是这个问题的延续,所以请考虑一下 你正在和一个刚刚开始在这里谈话:) Python list order
答案 0 :(得分:1)
对于索引的每个“桶”,您可以创建一个迭代器。然后,使用itertools.chain
将这些迭代器链接在一起。一个桶耗尽后,它将自动使用下一个桶,并且由于底层迭代器是共享的,因此不会使用两次索引。对于存储桶,您可以使用range
(或xrange
用于Python 2.x),如果最后一个存储桶是开放式的,请使用itertools.count
。
bucket1 = iter(range(0, 10))
bucket2 = iter(range(10, 20))
bucket3 = iter(itertools.count(20)) # or another range with upper bound
sub25 = itertools.chain(bucket1, bucket2, bucket3)
from25to100 = itertools.chain(bucket2, bucket3)
allOther = bucket3
示例(仅使用随机数,没有文件和用户输入以及不同长度的字符串):
target = [None] * 100
for _ in range(70):
n = random.randint(0, 150)
if n < 25:
i = next(sub25)
elif n < 100:
i = next(from25to100)
else:
i = next(allOther)
print(n, "goes to position", i)
target[i] = n
之后,target
列表最终为(按“桶”分类):
[0, 13, 22, 13, 6, 4, 21, 9, 6, None,
43, 51, 25, 41, 93, 98, 41, 43, 33, 68,
145, 121, 138, 103, 145, 124, 133, 127, 110, 109, 106, 116, 132, 77, 109, 25, 35, 43, 67, 46, 53, 28, 103, 129, 143, 112, 76, 66, 47, 125, 86, 86, 71, 73, 112, 113, 126, 89, 57, 26, 51, 107, 33, 115, 51, 54, 70, 50, 44, 91, 30, ...]
请注意一些存储桶不是100%已满,因为该存储桶的数量不足,而某些数字的存储桶数量超过了它们的值,因为它们在适当的存储桶已满时会被滚动。
更新:updated code中存在两个问题:
range(len(user_input))
或更好,直接循环user_input
i
的位置以及来自var
尝试将循环更改为:
for inp in user_input:
n = len(inp)
...
print(inp, "goes to position", i)