使用 Python 在陣列列表中分離 0 和 1?


陣列是一種線性資料結構,其元素儲存在連續的記憶體地址中。它主要用於對相同資料型別的元素進行分組。

給定一個整數陣列。根據文章“在陣列中分離 0 和 1”,將陣列分成兩半,0 和 1。陣列應該將所有 0 放置在左邊,所有 1 放置在右邊。

輸入輸出場景

讓我們考慮一個輸入及其輸出場景,以在陣列列表中分離 0 和 1 -

Input: [0,1,1,0,0,1,0,0,0]
Output: [0,0,0,0,0,0,1,1,1]

正如我們在輸出中看到的,所有 0 和 1 都已在陣列列表中分離,0 在左邊,1 在右邊。

在本文中,我們將討論在 Python 中分離陣列列表中 0 和 1 的各種方法。

透過計數 0 和 1

找到 0 的總數。計數將為 M。確定計數後,我們可以在陣列的開頭放置 M 個 0,並在剩餘的 n – M 個位置放置 1。

示例

以下是一個使用計數 0 和 1 方法在陣列列表中分離 0 和 1 的示例 -

def segregating(array, x) :
# Counting the 0's in array
   count = 0
   for i in range(0, x) :
      if (array[i] == 0) :
         count = count + 1

# Loop for segregationg all the 0's
   for i in range(0, count) :
      array[i] = 0

# Loop for segregationg all the 1's
   for i in range(count, x) :
      array[i] = 1

# Function for printing the segregated array
def print_the_array(array , x) :
   print( "The segregated array is :",end = "")

   for i in range(0, x) :
      print(array[i] , end = " ")

# The driver function
array = [0,1,1,0,0,1,0,0,0]
x = len(array)

segregating(array, x)
print_the_array(array, x)

輸出

以下是上述程式碼的輸出 -

The segregated array is :0 0 0 0 0 0 1 1 1

使用 2 個索引進行遍歷

Python 的 index() 函式返回給定列表中元素或字串中字元的位置。

為了檢查或使用資料作為過程的一部分,需要訪問儲存在陣列中的每個元素(項)。這被稱為遍歷陣列。

演算法

以下是在使用 2 個索引遍歷陣列時分離陣列列表中 0 和 1 的方法 -

  • 保留兩個索引。將第一個索引設定為左邊的 0,將第二個索引設定為右邊的 n-1。

  • 向左或向右移動時遵循。

  • 只要有 0 可用,就繼續增加左邊的索引。

  • 只要有 1 可用,就繼續減少右邊的索引。

  • 如果 left < right,則交換 arr[left] 和 arr[right]。

示例

以下是在使用 2 個索引遍歷陣列時分離陣列列表中 0 和 1 的示例 -

def segregating(array, s):

   # Initializing both the left and the right index
   left, right = 0, s-1
   while left < right:

   # Incrementing the left index while seeing 0 at the left
      while array[left] == 0 and left < right:
         left += 1

   # Decrementing right index while seeing 1 at right
      while array[right] == 1 and left < right:
         right -= 1
      if left < right:
         array[left] = 0
         array[right] = 1
         left += 1
         right -= 1
   return array

# The driver code
array = [0,1,1,0,0,1,0,0,0]
array_size = len(array)
print("The segregated array is :")
print(segregating(array, array_size))

輸出

以下是上述程式碼的輸出 -

The segregated array is :
[0, 0, 0, 0, 0, 0, 1, 1, 1]

使用列表推導式

列表推導式是 Python 中的常用技巧。在這裡,我們應用此方法。我們從使用者輸入構建一個數組,並且每個條目都應該是 0 和 1 的隨機組合。然後將左側的 0 分組,右側的 1 分組。我們遍歷陣列以分離兩個不同的列表,一個包含 0,另一個包含 1,然後我們將這兩個列表連線起來。

示例

以下是在使用列表推導式分離陣列列表中 0 和 1 的示例 -

# Segregate all the 0's and 1's present in an array list
def seg0s1s(A):
   n = ([i for i in A if i==0] + [i for i in A if i==1])
   print(n)

# Driver program
if __name__ == "__main__":
   A=list()
   n=int(input("Enter the size of the array ::"))
   print("Enter the number ::")
   for i in range(int(n)):
      k=int(input(""))
      A.append(int(k))
   print("The New ArrayList ::")
   seg0s1s(A)

輸出

以下是上述程式碼的輸出 -

Enter the size of the array ::7
Enter the number ::
1
0
1
0
0
1
1
The New ArrayList ::
[0, 0, 0, 1, 1, 1, 1]

更新於: 2022-12-19

1K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告