Tạo một mảng với các Subcripts và Superscript

Oct 04 2020

Tôi muốn tìm ra cách tạo một mảng bằng cách sử dụng chỉ số dưới và chỉ số trên dựa trên thông tin sau:

Cs = {1, 3, 5};
Ss = {1, -1, 1};
Rules = {1 -> "+", -1 -> "-"};
Ss1 = Ss /. Rules;

Nếu tôi thử, chẳng hạn:

{SubsuperscriptBox["c", Cs[[1]], Ss1[[1]]], 
  SubsuperscriptBox["c", Cs[[2]], Ss1[[2]]], 
  SubsuperscriptBox["c", Cs[[3]], Ss1[[3]]]} // DisplayForm

Tôi nhận được kết quả đầu ra là:

$\{c^{+}_1,c^{-}_3,c^{+}_5\}$

Đây là những gì tôi muốn có được. Tuy nhiên, tôi muốn làm điều này một cách tự động hơn thay vì mã hóa cứng như tôi vừa làm. Ý tôi là, tôi có thể thay đổi các mảng C và S thành một cái gì đó tùy ý. Ví dụ, giả sử thay vào đó tôi có:

 Cs = {1, 2, 4, 5};
 Ss = {1, -1, 1, -1};
 Rules = {1 -> "+", -1 -> "-"};
 Ss1 = Ss /. Rules;

Sau đó tôi sẽ nhận được:

$\{c^{+}_1,c^{-}_2,c^{+}_4,c^{-}_5\}$

Tất nhiên, tôi chỉ có thể thay đổi khối mã thứ hai, nhưng tôi muốn xem liệu có cách nào sạch hơn để thực hiện việc này mà tôi không cần phải thay đổi nó theo cách thủ công hay không.

Trả lời

4 HenrikSchumacher Oct 04 2020 at 15:15

Bạn có thể sử dụng, ví dụ:

MapThread[
 SubsuperscriptBox["c", ##] &,
 {Cs, Ss1}
 ]
4 kglr Oct 04 2020 at 16:22
Cs = {1, 2, 4, 5};
Ss = {1, -1, 1, -1};
Ss1 = Ss /. {1 -> "+", -1 -> "-"};

Thread[Subsuperscript["c", Cs, Ss1]]

Bạn cũng có thể Apply (@@@)hàm Subsuperscript["c", ##]&thành các cặp giá trị từ Csvà Ss1(nghĩa là đến Transpose[{Cs, Ss1}}]):

Subsuperscript["c", ##] & @@@ Transpose[{Cs, Ss1}]