我對 Python 真的很陌生,所以如果這是一個非常簡單的問題,請原諒我。我有一個給定的清單
x = [0,1,2,3,4,5,6,7,8,9]
現在我想使用串列推導創建一個串列 e,其中包含串列 x 的每個奇數元素的串列。該串列的所有內部元素都應該為真,并且串列元素的數量由當前 x 的數量給出。所以它應該是這樣的:
[[], [True, True], [True, True, True, True], ...]
我到目前為止的代碼是:
e = [[True for z in x] for z in x if z % 2 != 0]
列印時我得到一個串列,其中嵌套串列的數量等于串列 x 中奇數的數量,但它們都包含 True 十次。我該怎么做才能使內部串列的長度等于奇數的值?
uj5u.com熱心網友回復:
這段代碼應該做你想做的事:
[[True for _ in range(z)] for z in x if z % 2 != 0]
區別在于內心的理解,[True for _ in range(z)]。
以前,您在每個zin上進行迭代x,因此,對于每次迭代,z都是 out of 的整數x。然后,對于每個 unique z,您將再次迭代整個x。由于x有 10 個元素,因此可以進行 10 次迭代。
相反,您要做的是生成一個[True]長度為的陣列z。range(z)為您提供有保證的可迭代長度z,您可以根據需要生成盡可能多True的 s。
最里面的變數名,我用 a 代替了_,因為它沒有被使用。
uj5u.com熱心網友回復:
首先,if-condition 應該是z % 2 == 0,然后創建一個True可以使用的值串列[True] * z:
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
e = [[True] * z for z in x if z % 2 == 0]
print(e)
印刷:
[[], [True, True], [True, True, True, True], [True, True, True, True, True, True], [True, True, True, True, True, True, True, True]]
如果您不想使用[True] * z,可以執行以下操作:
e = [[True for _ in range(z)] for z in x if z % 2 == 0]
uj5u.com熱心網友回復:
您可以range使用step==2.
res = [[True]*e for e in range(0,9,2)]
# Or
res = [[True for _ in range(e)] for e in range(0,9,2)]
print(res)
輸出:
[[], [True, True], [True, True, True, True], [True, True, True, True, True, True], [True, True, True, True, True, True, True, True]]
解釋:
>>> list(range(0,9,2))
[0, 2, 4, 6, 8]
uj5u.com熱心網友回復:
搜索奇數可以這樣完成:
def generate_number_list(quantity: int):
"""
This creates a list of numbers
"""
number_list = []
for number in range(quantity):
number_list.append(number)
return number_list
def main():
number_list = generate_number_list(10)
odd_number_sub_lists = []
# Be careful with list comprehensions. Storing them
# could cause unexpected behaviour
[
odd_number_sub_lists.append(
# Nested list comprehension that uses the current_number
# as a range, only when its an odd number.
[True for count in range(current_number)]
)
for current_number in number_list
# As you typed odd Numbers. All of the previous
# statements only work if the current_number
# divided by two gives a residue greater than 0
if (current_number % 2 > 0)
]
return odd_number_sub_lists
if __name__ == '__main__':
result = main()
print(result)
結果:
[[True], [True, True, True], [True, True, True, True, True], [True, True, True, True, True, True, True], [True, True, True, True, True, True, True, True, True]]
現在,對于您想要的輸出,它將是偶數。您唯一需要更改的是以下陳述句:
if (current_number % 2 > 0)
為了這:
if (current_number % 2 == 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527080.html
